抓取表单结果

3 投票
4 回答
1458 浏览
提问于 2025-04-15 13:21

最近,我的一个客户让我为他们的保险业务建立一个网站。在这个项目中,他们想从一个报价网站上抓取一些数据。他们问是否有API可以使用,但被告知没有。不过,如果他们能从自己的系统获取数据,就可以随意使用。

我想问的是:在提交表单后,能否对另一个网站的响应进行数据抓取?如果可以的话,有哪些需要注意的地方?当然,法律和道德问题就不提了,因为他们已经请求了我们计划要做的事情的许可。

顺便说一下,我更喜欢用Python来处理这些事情。

谢谢

4 个回答

0

我看到其他两个回答已经提到了所有主要的库,适合用来抓取数据……前提是你要抓取的网站没有大量使用JavaScript。如果这个网站是个JavaScript重的网站,依赖JavaScript来获取和显示数据(比如通过AJAX),那么你的问题就会变得复杂得多。在这种情况下,我建议你可以先试试crowbar,或者对diggstripper进行一些定制,或者使用selenium等工具。

你可能需要在JavaScript上做大量的工作,并且可能还需要专门处理这个(假设是JavaScript重的网站)的具体情况,这取决于它使用的JavaScript框架等等;这就是为什么如果是这种情况,工作会变得更加困难。不过,无论如何,你最终可能会得到(至少部分)网站页面的本地HTML副本,然后用之前推荐的其他工具来抓取这些副本。祝你好运:希望你抓取的网站总是少用JavaScript!-)

2

你可以给 urllib.urlopen 传一个 data 参数,这样就能像填写表单一样发送 POST 数据。你当然需要先看看这个表单里到底包含了哪些数据。

另外,如果表单的 method="GET",那么请求的数据就会直接作为 URL 的一部分传给 urlopen

对于抓取返回的 HTML 数据,使用 BeautifulSoup 是比较标准的做法。

5

一个非常不错的网页抓取库是 mechanize,我认为它是一个用Perl编写的原始库的克隆。总之,结合 ClientForm 模块,再加上BeautifulSoup的一些额外帮助,你就可以开始了。

我在Python中写了很多网页抓取的代码,这些模块被证明是最有用的。理论上,mechanize能做的事情,完全可以用标准库中的urllib2httplib模块来实现,但mechanize让这一切变得简单:它基本上给你提供了一个程序化的浏览器(注意,它不需要真实的浏览器来工作,而是提供了一个像完全可定制的浏览器一样的API)。

在后期处理方面,我用BeautifulSoup取得了很多成功,但lxml.html也是一个不错的选择。

总的来说,你肯定能在Python中做到这一点,使用这些工具,你的结果应该会非常好。

撰写回答