2010-04-15 130 views
4

比如我需要从http://gmail.com/抢的免费存储空间数量:如何在网站上抓取动态内容并保存?

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

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

有没有一种方法可以设置服务器端脚本将抓住该号码,每次更改并将其保存到数据库?

谢谢。

+0

只是为了澄清,我不需要登录到Gmail,它是一个简单的“欢迎使用Gmail”页面,在您登录之前。 – Docstero 2010-04-15 14:17:27

+0

您是否需要更多信息才能接受答案? – marcgg 2010-05-21 08:43:08

回答

3

由于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,我喜欢使用Mechanizenokogiri。使用PHP,你可以看看像Sphider这样的解决方案。

0

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

你可以把这整个东西包装在一个函数中,该函数每x秒调用一次,或者你正在寻找的任何时间段。

+0

这不会真正起作用,因为在访问数据OP之前需要对自己进行身份验证 – marcgg 2010-04-15 14:00:19

+0

否您不会,他要查找的数据位于主要GMail登录屏幕上。 www.gmail.com – 2010-04-15 14:59:11

+0

我怎样才能每秒钟调用函数?克伦的工作?据我所知,你可以每分钟至少运行一次。 – Docstero 2010-04-15 15:07:51

0

在这种特殊情况下撇开合法性的问题,我建议如下:

试图攻击的东西是不可能的,停下来思考的地方不可能的来源,以及是否选择了正确的道路。

您是否真的认为有人在他的脑海里会发出一个新的http连接,或者更糟的是持有一个开放的comet连接来查看公共存储是否增长了?对于一个一致的用户?只需查看并找到一个函数,该函数根据某个初始值和当前时间计算值。

+0

这只是一个例子,用于解释我需要做什么。真正的项目与Gmail无关。我只是想解释一下,我需要从网站抓取动态数据并存储它。 – Docstero 2010-04-15 16:55:14

+0

@Docstero:动态数据不是无处不在。它们通常是从服务器接收的数据的确定性产品。直接与客户端代码使用的Web服务直接对话更简单(我甚至​​设法使用pyamf来代替FLEX应用程序)。否则,你的应用程序应该包含一个完整的浏览器或者是一个浏览器插件(如Firebug)。 – newtover 2010-04-15 17:21:23

1

最初我以为这是不可能的认为这个数字是由JavaScript初始化的。

但是,如果你关闭javascript的数量是在span标记中,并且可能是一个javascript函数以固定间隔增加它。

因此,您可以使用curl,fopen等从url中读取内容,然后解析查找此值的内容以将其存储在datanase中。并设置一个定期做这项工作。

有很多关于如何做到这一点的参考。包括SO。如果你被卡住了,那么就打开另一个问题。

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