2009-02-26 146 views
12

我经常发现自己需要为了内部目的而做一些简单的屏幕抓取(即,我仅使用通过HTML发布报告的第三方服务)。现在我至少有两三个例子。我可以使用Apache httpclient并创建所有必要的屏幕抓取代码,但需要一段时间。这是我平常的过程:超快速刮屏技巧?

  1. 在网站上打开Charles Proxy,看看发生了什么。
  2. 开始使用Apache HttpClient编写一些java代码,处理cookie,多个请求
  3. 使用Jericho HTML来处理HTML的解析。

我希望我能够快速记录我的会话,然后参数化每个会话之间不同的事情。设想一下,使用Charles抓取所有请求HTTP,然后参数化相关查询字符串或后参数。 Voila我有一个可重用的http脚本。

有什么可以做到这一点吗?我记得当我曾经在一家大公司工作时,曾经是我们使用的一个工具,我们称之为Mercury Interactive的Load Runner,它基本上有一个很好的方法来记录http会话并使其可重用(用于测试目的)。不幸的是,这个工具非常昂贵。

+0

感谢您对所有的答案。我认为他们都很有价值,并会帮助其他面临同样困境的人。我决定尝试Twill,因为它看起来像一种非常简单的语言,因为它在Python中是跨平台的。建议的许多工具看起来都不错 - 虽然有些看起来像Windows特有的,其他人似乎有更陡峭的学习曲线。 – Ish 2009-04-22 23:07:53

回答

5

我也想看看硒和/或BeautifulSoup如果您'愿意使用Python。还有一个不错的测试工具Twill用于自动网站测试,可以做你想做的事情。它也是用Python编写的,它有一个Python API,但是也可以使用简化的命令语言。这里是一个来自Twill文档的例子::

setlocal username <your username> 
setlocal password <your password> 

go http://www.slashdot.org/ 
formvalue 1 unickname $username 
formvalue 1 upasswd $password 
submit 

code 200  # make sure form submission is correct! 
+0

感谢您向我介绍Twill。我认为它解决了我需要的一点。尽管没有录音功能,但我认为其脚本语言的简单性将使我能够构建非常快速的屏幕抓取代码。所以我选择它作为赏金的答案。 – Ish 2009-04-22 23:05:37

+0

我也选择了你的答案,因为它的快速代码示例告诉我它是多么容易使用。 – Ish 2009-04-22 23:06:20

4

你没有提到你想用什么;一种解决方案是,如果使用Web浏览器重复您的操作是一个可以接受的解决方案,则使用Selenium等工具简单地“编写”您的Web浏览器。您可以使用Selenium IDE来记录您的操作,然后更改参数。

9

HtmlUnit是用Java编写的脚本化的无头浏览器。我们使用它来处理一些极端错误,复杂的网页,并且通常做得非常好。

为了简化事情,您可以使用Jython运行它。由此产生的程序更像是一个人如何使用浏览器而不是努力工作的抄本。

3

我希望我能够快速记录我的会话,然后参数化每个会话之间不同的事情。

如果您有Visual Studio测试版,它的网络测试功能确实如此。如果你不使用VS或者想要一个独立的工具,我可以用OpenSpan获得很大的成功。它不仅仅是web,它还包含windows应用程序和java!

3

Selenium将是我的第一个选择,因为IDE可以通过为您录制会话轻松地完成许多事情。但是,如果您对它提供的内容不满意,也可以使用名为Beautiful Soup的Python模块以编程方式浏览网站。

3

Coscripter

http://coscripter.research.ibm.com/coscripter

简化基于Web的过程。

CoScripter是记录, 自动化系统和共享进程在Web浏览 R,进行诸如 打印照片在线 ,请求 假期搁置邮寄,或 检查航班到达时间。 过程说明 记录和存储在CoScripter网站 的易于阅读的 文本,因此任何人都可以使用它们。如果您的 在基于网络的 过程中遇到问题,请检查是否有人为此编写了CoScript! !

Wget的

要迅速拉下内容,使用wget:

wget -r -n -k -w 2 foo.com 

然后在本地解析HTML。

斜纹

除了硒,您可能还检查出斜纹布,在命令行中的伴侣:

http://twill.idyll.org/

1

我用DomInspector手动检查感兴趣的站点来参数化它的结构。然后简单的Apache HttpClient和使用这个参数化结构的手工解析器。基本上,我可以通过一些参数的调整来自动从任何站点提取任何信息。它与SAX解析器的工作方式类似,您需要告诉它的是您想要开始抓取数据的标签序列。例如,谷歌有相当标准的搜索结果格式。所以,你只是运行到第三次出现的'标签',并开始从第一个'div'的文本直到结束'/ div'

1

iMacro脚本化,但仅适用于Firefox我认为它的性能并不好,但可以处理大多数复杂的情况,并且可以轻松地记录内容。

+0

我已经使用iMacro。它可以很好地将页面放下,它会记住用户名,密码等等,就好像你正在手动完成一样。但是,它需要Firefox。所以如果你想在没有窗口管理器的无头(Gnome,KDE)服务器上运行你的scraper,那么你运气不好。 – un33k 2009-07-10 19:53:46

1

Internet Explorer支持浏览器助手对象(BHO)。他们可以访问IE'HWND(窗口句柄),并且很容易从那里刮取像素。该IWebBrowser2 COM接口还可以访问到的HTTP请求,并且你可以通过IWebBrowser2::Document = IHTMLDocument/IHTMLDocument2 /IHTMLDocument3

1

使用Firefox找回解析HTML文档,它应该是可以实现很多的它与它的插件,并增强了强有力的支持,但是这并不意味着运行“无头”,但真的是一个真正的脚本浏览器。另外,我似乎还记得,读过谷歌的Chrome浏览器使用类似的技术来进行自动回归测试。

1

我不能亲自证明它,但有一个免费的Firefox插件:DejaClick 我有一天安装了它,并做了一些补救性的录制,回放和脚本编辑活动。它没有太多学习曲线就把它们拉下来。如果您的最终目标是在Web浏览器中显示某些内容,那么它就足够了。

他们提供网络交易监控服务,这意味着您可以将脚本导出用于其他用途,但它们可能太专有,无法在您的网络浏览器/其付费服务之外使用。

http://www.dejaclick.com/

1

我会找BADBOY。它运行一个IE浏览器,但你可以从字面上点击记录并记录你的所有活动。

然后,您可以自动执行脚本的处理,并从一个数据源填充值(ODBC,Excel等...)

Badboy Software

2

尝试iOpus iMacros的http://www.iopus.com/imacros/。我正在使用这个屏幕刮和它的工作非常好,速度也非常好。它也不那么昂贵。

它会在您浏览时记录脚本。然后,您可以参数化脚本并使用Java,.net等执行。

1

我会看看Fiddler根据您的请求判断它会执行您所需的一切。

2

Python和Perl都有一个名为Mechanize(WWW :: Mechanize for perl)的模块,它使易于以编程方式(填写表单,处理cookie等)执行浏览器行为。

所以,巨蟒+ BeautifulSoup(伟大的HTML/XML解析器)+机械化(浏览器功能)=超级容易/快刮刀