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

Pyt*_*ast 4 html python beautifulsoup html-parsing web-scraping

我是刮刮新手.我写了一个刮刀,它将刮掉Maplin商店.我用Python作为语言,使用BeautifulSoup刮掉商店.

我想问一下,如果我需要刮一些其他的网络商店(说亚马逊,Flipkart),做我需要定制我的代码,因为他们有不同的HTML模式(idclass名称不同,加上其他的东西也一样).所以,我写的刮刀不适用于其他电子商务商店.

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

ale*_*cxe 12

我需要自定义我的代码

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

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

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

通常,他们尽可能使用API​​.但是,如果没有,网页抓取和HTML解析始终是一个选项.


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

作为示例,请参阅由以下提供的Autoscraping工具Scrapinghub:

Autoscraping是一种在没有任何编程知识的情况下抓取网站的工具.您只需在视觉上注释网页(使用点击工具)以指示每个字段在页面上的位置,Autoscraping将从网站上抓取任何类似的页面.

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


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

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

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

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

也可以看看: