我想使用Greasemonkey抓取网站,并想知道是否有更好的方法来临时存储值而不是GM_setValue。
我想要做的是在社交网络中抓取我的联系人,并从他们的个人资料页面中提取Twitter网址。
我目前的计划是在其自己的标签中打开每个个人资料,这样它看起来更像是普通的浏览人(即浏览器会加载css,scrits和图像)。然后使用GM_setValue存储Twitter URL。抓取所有配置文件页面后,使用存储的值创建页面。
我对存储选项不太满意。也许有更好的方法?
我考虑过将用户配置文件插入当前页面,以便我可以使用相同的脚本实例处理它们,但我不确定XMLHttpRequest是否与普通用户发起的请求看起来不可分辨。
答案 0 :(得分:4)
我有一个类似的项目,我需要从网站上获取大量(发票行数据),然后将其导出到会计数据库中。
您可以创建一个.aspx(或PHP等)后端,它处理POST数据并将其存储在数据库中。
您希望从单个页面获得的任何数据都可以存储在一个表单中(如果需要,可以使用样式属性隐藏),使用字段名称或ID来标识数据。然后,您需要做的就是将表单操作设为.aspx页面并使用javascript提交表单。
(或者,您可以向页面添加提交按钮,以便在提交到数据库之前检查表单值。)
答案 1 :(得分:2)
我认为您首先应该问自己为什么要使用Greasemonkey来解决您的特定问题。 Greasemonkey是一种修改一个人的浏览体验的方式 - 而不是一个网络蜘蛛。虽然您可以使用GM_setValue让Greasemonkey执行此操作,但我认为您会发现您的解决方案很难开发并且难以开发。那,它需要许多手动步骤(比如打开所有这些选项卡,在脚本运行之间清除Greasemonkey变量等)。
你做的任何事都要求页面上的JavaScript被执行吗?如果是这样,您可能需要考虑使用Perl和WWW::Mechanize::Plugin::JavaScript。否则,我建议您在一个简单的Python脚本中完成所有这些操作。您需要查看urllib2模块。例如,请查看以下代码(请注意,它使用cookielib来支持cookie,如果您的脚本要求您登录到站点,则很可能需要这些cookie):
import urllib2
import cookielib
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookielib.CookieJar()))
response = opener.open("http://twitter.com/someguy")
responseText = response.read()
然后,您可以使用正则表达式完成所需的所有处理。
答案 2 :(得分:1)
您是否考虑过Google Gears?这样您就可以访问本地SQLite数据库,您可以在其中存储大量信息。
答案 3 :(得分:1)
想要Greasemonkey的原因 是要抓取的页面 不是真的赞成机器人。 Greasemonkey似乎是最简单的 让爬虫看起来的方法 合法。
实际上,通过浏览器污染您的抓取工具并不会使它更合法。您仍在违反网站的使用条款!例如,WWW :: Mechanize同样非常适合“欺骗”您的用户代理字符串,但如果该网站不允许蜘蛛/抓取工具,那么抓取和抓取非法!
答案 4 :(得分:0)
想要Greasemonkey的原因是要抓取的页面并不真正赞同机器人。 Greasemonkey似乎是使爬虫看起来合法的最简单方法。
我认为这是使爬虫看起来合法的最难以想象的方式。通过对HTTP标头的一些基本了解,欺骗Web浏览器非常容易。
此外,有些网站的启发式方法可以寻找像蜘蛛一样的客户端,因此只是让请求看起来像浏览器并不意味着不会知道你在做什么。