8

我想用Greasemonkey抓取一个站点,并想知道是否有比GM_setValue更好的临时存储值的方法。为基于Greasemonkey的搜寻器存储数据的最佳方法?

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

我目前的计划是打开它自己的选项卡中的每个配置文件,使它看起来更像一个正常的浏览人(即CSS,scrits和图像将由浏览器加载)。然后用GM_setValue存储Twitter网址。一旦所有配置文件页面被抓取后,使用存储的值创建一个页面。

虽然我对存储选项并不满意。也许有更好的方法?

我曾考虑将用户配置文件插入当前页面,以便我可以使用相同的脚本实例处理它们,但我不确定XMLHttpRequest是否显示对普通用户启动的请求无法判断。

回答

4

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

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

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

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

1

你认为Google Gears?这会让你访问一个本地的SQLite数据库,你可以存储大量的信息。

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() 

然后,你可以做所有使用正则表达式的处理。

+0

想要Greasemonkey的原因是要抓取的页面并不真正批准机器人。 Greasemonkey似乎是使爬虫看起来合法的最简单方法。 – 2009-07-02 10:38:04

1

之所以希望的Greasemonkey 是被抓取的页面不 没有真正认可的机器人。 Greasemonkey似乎是最简单的 的方式,使爬虫看起来合理的 。

实际上通过浏览器来检测爬虫程序并不会使它更合理。您仍然违反网站的使用条款!例如WWW :: Mechanize同样非常适合于'欺骗'你的用户代理字符串,但是如果网站不允许蜘蛛/爬虫不合法,那么爬行就是这样。

0

想要Greasemonkey的原因是要抓取的页面并不真正赞同机器人。 Greasemonkey似乎是使爬虫看起来合法的最简单方法。

我认为这是让爬虫看起来合法的最难想象的方法。通过对HTTP头的一些基本理解,欺骗Web浏览器非常简单。

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

+0

我不认为设置正确的标题就足够了。您还必须加载图像,触发AJAX请求,而不是。 – 2010-11-28 17:04:10