8

我想用 Greasemonkey 抓取一个网站,想知道是否有比使用 GM_setValue 更好的方法来临时存储值。

我想做的是在社交网络中抓取我的联系人并从他们的个人资料页面中提取 Twitter URL。

我目前的计划是在它自己的选项卡中打开每个配置文件,使其看起来更像一个普通的浏览者(即浏览器将加载 css、scrits 和图像)。然后用 GM_setValue 存储 Twitter URL。抓取完所有个人资料页面后,使用存储的值创建一个页面。

不过,我对存储选项不太满意。也许有更好的方法?

我已经考虑将用户配置文件插入当前页面,以便我可以使用相同的脚本实例处理它们,但我不确定 XMLHttpRequest 看起来是否与普通用户发起的请求没有区别。

4

5 回答 5

4

我有一个类似的项目,我需要从网站获取大量(发票行数据),并将其导出到会计数据库中。

您可以创建一个 .aspx(或 PHP 等)后端,它处理 POST 数据并将其存储在数据库中。

您想要从单个页面获得的任何数据都可以存储在表单中(如果需要,可以使用样式属性隐藏),使用字段名称或 id 来标识数据。然后,您需要做的就是将表单操作设为 .aspx 页面并使用 javascript 提交表单。

(或者,您可以在页面上添加一个提交按钮,允许您在提交到数据库之前检查表单值)。

于 2009-02-02T06:03:41.983 回答
2

我认为您应该首先问自己为什么要使用 Greasemonkey 来解决您的特定问题。Greasemonkey 是作为一种修改浏览体验的方式而开发的——而不是作为网络蜘蛛。虽然您可以使用 GM_setValue 让 Greasemonkey 执行此操作,但我认为您会发现您的解决方案很笨拙且难以开发。那将需要许多手动步骤(例如打开所有这些选项卡,在脚本运行之间清除 Greasemonkey 变量等)。

您所做的任何事情都需要执行页面上的 JavaScript 吗?如果是这样,您可能需要考虑使用 Perl 和WWW::Mechanize::Plugin::JavaScript。否则,我建议您在一个简单的 Python 脚本中完成所有这些操作。你会想看看urllib2模块。例如,看一下下面的代码(注意它使用 cookielib 来支持 cookie,如果你的脚本要求你登录到一个站点,你很可能需要它):

import urllib2
import cookielib
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookielib.CookieJar()))
response = opener.open("http://twitter.com/someguy")
responseText = response.read()

然后,您可以使用正则表达式进行所有您想要的处理。

于 2009-02-13T22:47:49.820 回答
1

您是否考虑过 Google Gears?这将使您可以访问可以存储大量信息的本地 SQLite 数据库。

于 2009-02-10T20:57:49.537 回答
1

想要 Greasemonkey 的原因是要爬的页面并不真正认可机器人。Greasemonkey 似乎是让爬虫看起来合法的最简单方法。

实际上,通过浏览器污染您的爬虫并不会使其更合法。您仍然违反了网站的使用条款!例如,WWW::Mechanize 同样适合“欺骗”您的用户代理字符串,但如果该站点不允许蜘蛛/爬虫,那么爬网是非法的!

于 2010-05-16T12:53:55.243 回答
0

想要 Greasemonkey 的原因是要爬的页面并不真正认可机器人。Greasemonkey 似乎是让爬虫看起来合法的最简单方法。

我认为这是使爬虫看起来合法的最难的方法。通过对 HTTP 标头的一些基本了解,欺骗 Web 浏览器非常容易。

此外,一些站点具有寻找行为像蜘蛛的客户端的启发式方法,因此简单地使请求看起来像浏览器并不意味着不会知道您在做什么。

于 2010-05-16T13:05:28.177 回答