如何抓取网站上的动态内容并保存?

时间:2010-04-15 13:49:02

标签: php javascript mysql server-side screen-scraping

例如,我需要从http://gmail.com/获取免费存储空间的数量:

Over <span id=quota>2757.272164</span> megabytes (and counting) of free storage.

然后将这些数字存储在MySql数据库中。 正如您所见,这个数字是动态变化的。

有没有办法可以设置服务器端脚本,每次更改时都会抓取该数字,并将其保存到数据库中?

感谢。

4 个答案:

答案 0 :(得分:3)

由于Gmail不提供任何API来获取此信息,因此听起来您想要执行一些web scraping

  

Web抓取(也称为Web   收获或Web数据提取)是   计算机软件技术   从网站提取信息

有许多方法可以做到这一点,如之前链接的维基百科文章所述:

  

人类复制和粘贴:有时甚至   最好的网络抓取技术可以   不能取代人工的人工检查   和复制粘贴,有时这个   可能是唯一可行的解​​决方案   明确抓取的网站   设置障碍以防止机器   自动化。

     

文本grepping和正则表达式   匹配:简单而强大   从中提取信息的方法   网页可以基于UNIX   grep命令或正则表达式   编程的匹配设施   语言(例如Perl或   Python)的

     

HTTP编程:静态和动态   可以通过发布来检索网页   对远程Web服务器的HTTP请求   使用套接字编程。

     

DOM解析:通过嵌入   完整的Web浏览器,如   Internet Explorer或Mozilla Web   浏览器控制,程序可以检索   由...生成的动态内容   客户端脚本。这些Web浏览器   控件还将网页解析为   DOM树,基于哪些程序可以   检索部分网页。

     

HTML解析器:一些半结构化的   数据查询语言,例如XML   查询语言(XQL)和   超文本查询语言(HTQL),可以   用于解析HTML页面和   检索和转换Web内容。

     网络抓取软件:有很多   网络抓取软件可用   可用于自定义Web抓取   解决方案。这些软件可能会提供   删除的Web录制界面   手动编写的必要性   网络抓取代码,或一些脚本   可用于提取的函数   并转换Web内容,以及   可以存储的数据库接口   在本地数据库中删除数据。

     

语义标注识别:   网页可能包含元数据或   可以的语义标记/注释   用于定位特定数据   片段。如果注释是   嵌入在页面中,作为Microformat   是的,这种技术可以被视为   DOM解析的一个特例。在   另一个案例,注释,   组织成语义层2,   存储和管理分开   网页,所以网络刮板可以   检索数据模式和指令   从刮擦之前的这一层   页。

在我继续之前,请记住所有这些legal implications。我不知道它是否符合gmail的条款,我建议在继续之前检查它们。您最终可能会被列入黑名单或遇到其他问题。

所有这一切,我会说在你的情况下你需要某种蜘蛛和DOM解析器来登录gmail并找到你想要的数据。此工具的选择取决于您的技术堆栈。

作为ruby dev,我喜欢使用Mechanizenokogiri。使用PHP,您可以查看Sphider等解决方案。

答案 1 :(得分:1)

最初,我认为不可能认为该号码是由javascript初始化的。

但是如果关闭javascript,数字就会出现在span标记中,并且javascript函数可能会定期增加它。

因此,您可以使用curl,fopen等从URL中读取内容,然后您可以解析查找此值的内容以将其存储在数据库中。并设置一个cron工作来定期完成。

有很多关于如何做到这一点的参考资料。包括SO。如果你遇到困难,那就打开另一个问题。

警告:Google有办法查明他们的应用是否被删除,他们会在一段时间内阻止您的IP。阅读谷歌小字。它发生在我身上。

答案 2 :(得分:0)

我可以看到你这样做的一种方式(可能不是最有效的方法)是使用PHP和YQL(来自Yahoo!)。使用YQL,您可以指定网页(www.gmail.com)和XPATH以获取span标记内的值。它本质上是网络抓取,但YQL为您提供了一个很好的方法,可以使用4-5行代码。

你可以将整个事物包装在一个每隔x秒被调用的函数中,或者你正在寻找的任何时间段。

答案 3 :(得分:0)

除了这个特殊情况下的合法性问题,我建议如下:

尝试攻击不可能发生的事情,停下来思考不可能性来自哪里,以及你是否选择了正确的方式。

你真的认为他脑子里的某个人会发出一个新的http连接,或者甚至更糟糕的是保持一个开放的comet连接来查看公共存储是否已经增长?对于一个无用的用户?只需查看并找到一个根据某个初始值和当前时间计算值的函数。

相关问题