如何在网站上抓取动态内容并保存?
比如我需要从http://gmail.com/抢的免费存储空间数量:如何在网站上抓取动态内容并保存?
Over <span id=quota>2757.272164</span> megabytes (and counting) of free storage.
,然后将这些数字存储在MySQL数据库中。如你所见,这个数字正在动态变化。
有没有一种方法可以设置服务器端脚本将抓住该号码,每次更改并将其保存到数据库?
谢谢。
由于Gmail没有提供任何API来获取此信息,这听起来像你想要做一些web scraping。
网页抓取(也称为Web 收获或网络数据提取)是 从网站 提取信息的计算机软件技术
这样做有多种方式,如在*中提到文章链接之前:
人复制和粘贴:有时甚至 最好的网络抓取技术可以 不能替代人工检测 并且复制粘贴,有时这个 可能是唯一可行的解决方案,当 的网站为了明确 设置屏障阻止机器 自动化。
文本grepping和正则表达式 匹配:一个简单但功能强大的 方法来提取 网页信息可以基于UNIX的 grep命令或正则表达式的编程 语言 配套设施(例如Perl或 蟒蛇)。
HTTP编程:静态和动态 通过使用套接字编程发送 HTTP请求到远程Web服务器 可以检索网页。
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并找到你想要的数据。这个工具的选择将取决于您的技术堆栈。
作为一个红宝石dev,我喜欢使用Mechanize和nokogiri。使用PHP,你可以看看像Sphider这样的解决方案。
我可以看到你这样做的一种方式(这可能不是最有效的方式)是使用PHP和YQL(来自雅虎)。使用YQL,您可以指定网页(www.gmail.com)和XPATH以获得span标签内的值。它本质上是网页抓取,但YQL为您提供了一种使用大概4-5行代码的好方法。
你可以把这整个东西包装在一个函数中,该函数每x秒调用一次,或者你正在寻找的任何时间段。
在这种特殊情况下撇开合法性的问题,我建议如下:
试图攻击的东西是不可能的,停下来思考的地方不可能的来源,以及是否选择了正确的道路。
您是否真的认为有人在他的脑海里会发出一个新的http
连接,或者更糟的是持有一个开放的comet
连接来查看公共存储是否增长了?对于一个一致的用户?只需查看并找到一个函数,该函数根据某个初始值和当前时间计算值。
最初我以为这是不可能的认为这个数字是由JavaScript初始化的。
但是,如果你关闭javascript的数量是在span标记中,并且可能是一个javascript函数以固定间隔增加它。
因此,您可以使用curl,fopen等从url中读取内容,然后解析查找此值的内容以将其存储在datanase中。并设置一个定期做这项工作。
有很多关于如何做到这一点的参考。包括SO。如果你被卡住了,那么就打开另一个问题。
警告:Google有办法查明他们的应用程序是否被刮掉,并且他们会在一段时间内阻止您的IP。阅读谷歌的小字。这发生在我身上。
只是为了澄清,我不需要登录到Gmail,它是一个简单的“欢迎使用Gmail”页面,在您登录之前。 – Docstero 2010-04-15 14:17:27
您是否需要更多信息才能接受答案? – marcgg 2010-05-21 08:43:08