代码之家  ›  专栏  ›  技术社区  ›  Pierre-Jean Coudert

屏幕刮擦窗体结果

  •  3
  • Pierre-Jean Coudert  · 技术社区  · 15 年前

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

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

    顺便说一下,我更喜欢用Python进行任何处理。

    谢谢

    4 回复  |  直到 15 年前
        1
  •  5
  •   jkp    15 年前

    一个非常好的屏幕抓取库是 mechanize 我相信这是用Perl编写的原始库的克隆。总之,这和 ClientForm 模块,还有一些来自美汤的额外帮助,你应该离开。

    我已经用Python编写了大量的屏幕抓取代码,这些模块是最有用的。大部分的东西 机械化 理论上可以通过使用 urllib2 httplib 来自标准库的模块,但是 机械化 使这一切变得轻而易举:本质上,它为您提供了一个程序化的浏览器(注意,它不需要一个浏览器来工作,但它为您提供了一个API,其行为类似于一个完全可定制的浏览器)。

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

    基本上,您可以在Python中肯定地做到这一点,并且您的结果应该非常适合使用现有的各种工具。

        2
  •  2
  •   balpha    15 年前

    你可以通过 data 参数到 urllib.urlopen 像填写表格一样,用请求发送日志数据。很明显,您必须查看表单确切包含哪些数据。

    此外,如果表格 method="GET" ,请求数据只是给定的URL的一部分 urlopen .

    获取返回的HTML数据的标准是 BeautifulSoup .

        3
  •  0
  •   Alex Martelli    15 年前

    我看到另外两个答案已经提到了所有主要图书馆的选择。只要被抓取的站点没有大量使用javascript,也就是说。如果它是一个javascript重的站点,并且依赖于JS来获取和显示数据(例如通过Ajax),那么您的问题就更难解决一个数量级的问题;在这种情况下,我建议从 crowbar ,一些定制 diggstripper selenium 等。

    您将不得不在javascript中做大量的工作,可能还需要专门的工作来处理所讨论的(假设是JS重的)站点的细节,这取决于它使用的JS框架等;这就是为什么如果是这样的话,工作会更加困难的原因。但在任何情况下,您都可能最终得到(至少部分)显示的站点页面的本地HTML副本,并以抓取结束。 那些 使用其他已推荐的工具进行复制。祝你好运:愿你所搜刮的网站永远是javascript轻!-)

        4
  •  0
  •   aehlke    15 年前

    其他人推荐了漂亮的汤,但用起来更好 lxml . 尽管它的名字,它也用于解析和抓取HTML。它比BeautifulSoup快很多,甚至比BeautifulSoup(他们的名声)更好地处理“坏的”HTML。如果您不想学习LXML API,它也有一个与BeautifulSoup兼容的API。

    Ian Blicking agrees .

    没有理由再使用漂亮的汤了,除非你在google应用引擎上,或者其他一些不允许使用纯python的东西。