超快的屏幕抓取技术?

时间:2009-02-26 08:30:18

标签: html screen-scraping

我经常发现自己需要为内部目的进行一些简单的屏幕抓取(即我使用的第三方服务仅通过HTML发布报告)。我现在至少有两三个这样的案例。我可以使用apache httpclient并创建所有必要的屏幕抓取代码,但它需要一段时间。这是我通常的过程:

  1. 在网站上打开Charles Proxy并查看最新情况。
  2. 使用Apache HttpClient开始编写一些Java代码,处理cookie,多个请求
  3. 使用Jericho HTML来处理HTML的解析。
  4. 我希望我能够快速“记录我的会话”,然后参数化会话之间不同的事情。想象一下,只需使用Charles获取所有请求HTTP,然后参数化相关的查询字符串或post params。我有一个可重复使用的http脚本。

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

15 个答案:

答案 0 :(得分:9)

HtmlUnit是一个用Java编写的可编写脚本的无头浏览器。我们将它用于一些极其错误,复杂的网页,它通常做得非常好。

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

答案 1 :(得分:5)

如果你愿意使用Python,我也会看看Selenium和/或BeautifulSoup。还有一个很好的测试工具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!

答案 2 :(得分:4)

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

答案 3 :(得分:3)

  

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

如果您有Visual Studio测试版,它的Web测试功能就是这样做的。如果您不使用VS或想要一个独立的工具,我在OpenSpan取得了巨大的成功。它不仅仅是网络,还有Windows应用程序和java!

答案 4 :(得分:3)

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

答案 5 :(得分:3)

<强> Coscripter

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

  

简化基于网络的流程。

     

CoScripter是一个录音系统,   自动化和共享流程   在网页浏览中执行等   在线打印照片,请求   邮寄假期,或   检查航班到达时间。   流程说明是   以易于阅读的方式记录和存储   CoScripter网站上的文字,   所以任何人都可以利用它们。如果你   基于网络的麻烦   过程,检查是否有人   为它编写了一个CoScript!

<强> Wget的

要快速下拉内容,请使用wget:

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

然后在本地解析HTML。

<强>斜纹

除了Selenium之外,您还可以查看命令行伴侣Twill:

http://twill.idyll.org/

答案 6 :(得分:2)

尝试iOpus iMacros http://www.iopus.com/imacros/。我正在使用它进行屏幕刮擦,并且它的工作非常好,而且速度也非常好。它也不贵。

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

答案 7 :(得分:2)

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

所以,Python + BeautifulSoup(很棒的html / xml解析器)+机械化(浏览器功能)=超级简单/快速刮刀

答案 8 :(得分:1)

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

答案 9 :(得分:1)

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

答案 10 :(得分:1)

Internet Explorer支持浏览器帮助程序对象(BHO)。他们可以访问IE'WWND(窗口句柄),并且很容易从那里刮掉像素。 IWebBrowser2 COM接口还允许您访问HTTP请求,您可以通过IWebBrowser2::Document = IHTMLDocument / IHTMLDocument2 /IHTMLDocument3

取回已解析的HTML文档

答案 11 :(得分:1)

使用FireFox,应该可以通过其对插件和增强功能的强大支持来实现其中的大部分功能,但这并不意味着运行“无头”,而是真正的真实脚本浏览器。此外,我似乎记得曾经读过谷歌的Chrome浏览器使用类似的技术进行自动回归测试。

答案 12 :(得分:1)

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

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

http://www.dejaclick.com/

答案 13 :(得分:1)

我看看Badboy。它运行IE浏览器,但您可以直接点击记录,它会记录您的所有活动。

然后,您可以自动处理该脚本并从数据源(ODBC,Excel等)填充值

Badboy Software

答案 14 :(得分:1)

我会根据你的要求来看Fiddler它会做你需要的一切。