是否需要为他们所针对的每个站点编写刮刀?

时间:2014-12-27 21:36:07

标签: python html web-scraping beautifulsoup html-parsing

我是刮刮新手。我写了一个scraper,它会刮掉Maplin商店。我用Python作为语言,使用BeautifulSoup刮掉商店。

我想问一下,如果我需要抓一些其他电子商务商店(比如亚马逊,Flipkart),我是否需要自定义我的代码,因为他们有不同的HTML架构(idclass名称是不同的,加上其他东西)。所以,我写的刮刀不适用于其他电子商务商店。

我想知道价格比较网站如何从所有在线商店中获取数据?他们对不同的在线商店有不同的代码,还是一般的?他们是否研究每个在线商店的HTML架构?

2 个答案:

答案 0 :(得分:11)

  

我是否需要自定义代码

是的,当然。这不仅是因为网站具有不同的HTML架构。它还涉及加载/呈现页面所涉及的机制:一些站点使用AJAX加载页面的部分内容,其他站点让javascript填写页面上的占位符,这使得它更难刮 - 可能有很多和很多差异。其他人会使用反网络抓取技术:检查你的标题,行为,在经常点击网站后禁止你等。

我还看到过将价格保留为图像,或者使用"噪音混淆的案例。 - 使用不同技术隐藏的不同标签,如CSS规则,类,JS代码,"显示:无"等等 - 对于浏览器中的最终用户来说,数据看起来正常,但对于网络抓取机器人而言#34;这是一团糟。

  

想知道价格比较网站如何从所有在线商店中获取数据?

通常,他们尽可能使用API​​。但是,如果没有,网页抓取和HTML解析总是一种选择。


一般的高级想法是将抓取代码分成两个主要部分。静态的是一个通用的网络抓取蜘蛛(逻辑),它读取传入的参数或配置。动态的一个 - 注释器/网站特定的配置 - 这通常是特定于字段的xpath表达式或css选择器。

例如,请参阅Autoscraping tool提供的Scrapinghub

  

Autoscraping是一种无需任何编程即可抓取网站的工具   知识。您只需在视觉上注释网页(带点和   单击工具)以指示页面上每个字段的位置和   Autoscraping将从网站上抓取任何类似的页面。

而且,仅供参考,研究Scrapinghub提供的内容和文档 - 有许多有用的信息和一组不同的独特网络抓取工具。


我个人参与了一个我们正在构建通用Scrapy蜘蛛的项目。据我记忆,我们有一个"目标"数据库表,其中记录由浏览器扩展(注释器)插入,字段注释保存在JSON中:

{
    "price": "//div[@class='price']/text()",  
    "description": "//div[@class='title']/span[2]/text()"
}

通用蜘蛛接收目标ID作为参数,读取配置并抓取网站。

我们在通用方面遇到了很多问题。一旦网站涉及javascript和ajax,我们就开始编写特定于站点的逻辑来获取所需的数据。

另见:

答案 1 :(得分:0)

对于许多价格比较抓取工具,当用户表示他们希望跟踪某物的价格时,他们会在供应商网站上进行产品搜索。一旦用户选择了他们感兴趣的内容,这将被添加到产品的全局缓存中,然后可以定期抓取这些产品,而不必总是频繁地浏览整个网站