屏幕抓形式结果

时间:2009-08-03 13:30:23

标签: python forms screen-scraping

我最近要求客户为他们的保险业务建立一个网站。作为其中的一部分,他们希望为其中一个提供商对报价网站进行一些屏幕抓取。他们问他们是不是一个API来做这个,并被告知没有一个,但如果他们可以从他们的引擎获取数据,他们可以按照他们的意愿使用它。

我的问题:甚至可以对表单提交到另一个站点的响应执行屏幕抓取吗?如果是这样,我应该注意哪些问题。除了明确的法律/道德问题,因为他们已经要求获得我们计划做的事情的许可。

顺便说一下,我更喜欢在python中进行任何处理。

由于

4 个答案:

答案 0 :(得分:5)

一个非常好的屏幕抓取库是mechanize,我相信它是用Perl编写的原始库的克隆。无论如何,结合ClientForm模块,以及来自BeautifulSoup的一些额外帮助,你应该离开。

我在Python中编写了大量的屏幕抓取代码,这些模块最有用。 mechanize所做的大多数事情理论上可以通过简单地使用标准库中的urllib2httplib模块来完成,但是mechanize使这些东西变得轻而易举:基本上它为您提供了一个程序化浏览器(注意,它不需要浏览器工作,但是它会为您提供一个行为类似于完全可自定义的浏览器的API)。

对于后处理,我在BeautifulSoup上取得了很大的成功,但lxml.html也是一个不错的选择。

基本上,你可以用Python做到这一点,你的结果应该非常适合那里的工具。

答案 1 :(得分:2)

您可以将data参数传递给urllib.urlopen,以便像填写表单一样发送带有请求的POST数据。您显然必须查看表单中包含的数据。

此外,如果表单包含method="GET",请求数据只是urlopen提供的网址的一部分。

抓取返回的HTML数据的标准是BeautifulSoup

答案 2 :(得分:0)

我看到其他两个答案已经提到了所有主要的选择库...只要被抓取的网站没有大量使用Javascript,就是这样。如果它是一个Javascript密集的站点并且依赖于JS来获取和显示的数据(例如通过AJAX),那么你的问题就会变得更难了一个数量级。在这种情况下,我可能会建议从crowbar开始,对diggstripperselenium进行一些自定义等。

你必须在Javascript中做大量工作,并且可能需要专门处理有问题的(假设JS重)站点的细节,具体取决于它使用的JS框架等;这就是为什么如果是这样的话,这项工作就更难了。但无论如何,您最终可能会(至少部分地)显示所显示的网站页面的本地HTML副本,最后通过使用已推荐的其他工具来抓取这些副本。祝你好运:你刮的网站总是可能是Javascript-light! - )

答案 3 :(得分:0)

其他人推荐使用BeautifulSoup,但使用lxml要好得多。尽管它的名字,它也用于解析和抓取HTML。它比BeautifulSoup快得多,甚至比BeautifulSoup(他们声名鹊起)更能处理“破碎”的HTML。如果您不想学习lxml API,它还有BeautifulSoup的兼容性API。

Ian Blicking agrees

没有理由再使用BeautifulSoup了,除非您使用的是Google App Engine或其他不允许使用Python的东西。