还在焦头烂额裸写Scrapy?这个神器让你90秒内配好一个爬虫

网友投稿 913 2022-05-30

背景

爬虫是一件有趣的事情,让你可以通过爬虫程序自动化的将网上的信息抓取下来,免去了很多人工操作。在一些优质爬虫框架出来之前,开发者们还是通过简单的网络请求+网页解析器的方式来开发爬虫程序,例如 Python 的 requests + BeautifulSoup,高级一点的爬虫程序还会加入数据储存的模块,例如 MySQL、MongoDB。这种方式开发效率低,稳定性不佳,要开发好一个完备的、生产可用的爬虫可能需要好几个小时。我将这种方式称作 非框架爬虫。

2011 年,基于 Twisted 编写的 scrapy 爬虫框架横空出世,突然被大众熟知,成为了首屈一指的全能的高性能爬虫异步框架。Scrapy 抽象出了几个核心模块,让开发者将主要注意力放在爬虫抓取逻辑上,而不用管数据下载、页面解析、任务调度等比较繁琐的模块。开发好一个生产可用的 Scrapy 爬虫,简单的可能只需要十几分钟,复杂的可能需要 1 小时以上。当然,我们还有其他很多优秀框架,例如 PySpider、Colly 等。我将这种爬虫称作 框架爬虫。框架爬虫解放了生产力,现在很多企业将框架爬虫改造后应用在生产环境中,大规模抓取数据。

然而,对于需要抓成百上千个网站的爬虫需求来说,框架爬虫可能就有些心有余而力不足了,编写爬虫成了体力活。例如,如果平均开发一个框架爬虫需要 20 分钟,如果一个全职爬虫开发工程师每天工作 8 个小时,那么开发 1000 个网站就需要 20000 分钟,333 个小时,42 个工作日,近 2 个月。当然,我们可以雇佣 10 个全职爬虫开发工程师,但这同样需要 4 个工作日才能完成(如下图)。

这同样是比较低效的。为了克服这个效率问题,可配置爬虫 应运而生。

可配置爬虫介绍

可配置爬虫(Configurable Spider) 正如其名字表示的,就是可以配置抓取规则的爬虫。可配置爬虫是一种高度抽象的爬虫程序,开发人员不用编写爬虫代码,只需要将需要抓取网页地址、字段、属性写在配置文件或数据库中,让特殊的爬虫程序根据配置去抓取数据。可配置爬虫将爬虫代码进一步抽象成了配置信息,简化了爬虫开发的流程。爬虫开发者只需要做相应的配置就可以完成爬虫的开发。因此,开发者可以通过可配置爬虫,大规模的编写爬虫程序(如下图)。

这样的方式让抓取成百上千的网站成了可能,一个熟练的爬虫配置员一天可以配置 1000 个新闻网站的爬虫。这对于有舆情监控需求的企业来说非常重要,因为可配置爬虫提高了生产力,让单位工作时间成本降低,提升了开发效率,方便后续的舆情分析和人工智能产品开发。很多企业都是自己研发的可配置爬虫(可能叫法会有些不一样,但实质是一个东西),然后雇佣一些爬虫配置员专门负责配置爬虫。

市面上免费开源的可配置爬虫框架并不多。比较早的有微软大神崔庆才开发的 Gerapy,属于一个爬虫管理平台,能够根据配置规则生成 Scrapy 项目文件。另一个比较新的可配置爬虫框架是 Crawlab(其实 Crawlab 不是可配置爬虫框架,而是一个灵活度很高的爬虫管理平台),在 v0.4.0 中发布了可配置爬虫。另外还有一个基于 Golang 的开源框架 Ferret ,很有意思,编写爬虫跟写 SQL 一样简单。其他还有一些商业产品,但据用户反馈后都觉得专业度不高,不能满足生产需求。

可配置爬虫的诞生,主要是爬虫的模式比较单一,无非就是列表页+详情页的组合(如下图),或者仅仅列表页。当然还有稍微复杂一点的通用爬虫,这些也可以通过规则配置来完成。

Crawlab 可配置爬虫

我们今天主要介绍的是 Crawlab 的可配置爬虫。我们之前在 这篇文章 中有所介绍,但并没有深入讲解如何应用到实战中。今天,我们着重讲解一下。如果对 Crawlabb 的可配置爬虫比较陌生,请参考可配置爬虫的 文档。

可配置爬虫实战

百度(搜索 "Crawlab")

爬虫地址:http://crawlab.cn/demo#/spiders/5e27d055b8f9c90019f42a83

version: 0.4.4

engine: scrapy

start_url: http://www.baidu.com/s?wd=crawlab

start_stage: list

stages:

- name: list

is_list: true

list_css: ""

list_xpath: //*[contains(@class, "c-container")]

page_css: ""

page_xpath: //*[@id="page"]//a[@class="n"][last()]

page_attr: href

fields:

- name: title

css: ""

xpath: .//h3/a

attr: ""

next_stage: ""

remark: ""

- name: url

css: ""

xpath: .//h3/a

attr: href

next_stage: ""

remark: ""

- name: abstract

css: ""

xpath: .//*[@class="c-abstract"]

attr: ""

next_stage: ""

remark: ""

settings:

ROBOTSTXT_OBEY: "false"

USER_AGENT: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML,

like Gecko) Chrome/78.0.3904.108 Safari/537.36

SegmentFault(最新文章)

爬虫地址:http://crawlab.cn/demo#/spiders/5e27d116b8f9c90019f42a87

version: 0.4.4

engine: scrapy

start_url: https://segmentfault.com/newest

start_stage: list

stages:

- name: list

is_list: true

list_css: .news-list > .news-item

list_xpath: ""

page_css: ""

page_xpath: ""

page_attr: ""

fields:

- name: title

css: h4.news__item-title

xpath: ""

attr: ""

next_stage: ""

remark: ""

- name: url

css: .news-img

xpath: ""

attr: href

next_stage: ""

remark: ""

- name: abstract

css: .article-excerpt

xpath: ""

attr: ""

next_stage: ""

remark: ""

settings:

ROBOTSTXT_OBEY: "false"

USER_AGENT: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML,

like Gecko) Chrome/78.0.3904.108 Safari/537.36

亚马逊中国(搜索"手机")

爬虫地址:http://crawlab.cn/demo#/spiders/5e27e157b8f9c90019f42afb

version: 0.4.4

engine: scrapy

start_url: https://www.amazon.cn/s?k=%E6%89%8B%E6%9C%BA&__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&ref=nb_sb_noss_2

start_stage: list

stages:

- name: list

is_list: true

list_css: .s-result-item

list_xpath: ""

page_css: .a-last > a

page_xpath: ""

page_attr: href

fields:

- name: title

css: span.a-text-normal

xpath: ""

attr: ""

next_stage: ""

remark: ""

- name: url

css: .a-link-normal

xpath: ""

attr: href

next_stage: ""

remark: ""

- name: price

css: ""

xpath: .//*[@class="a-price-whole"]

attr: ""

next_stage: ""

remark: ""

- name: price_fraction

css: ""

xpath: .//*[@class="a-price-fraction"]

attr: ""

next_stage: ""

remark: ""

- name: img

css: .s-image-square-aspect > img

xpath: ""

attr: src

next_stage: ""

remark: ""

settings:

ROBOTSTXT_OBEY: "false"

USER_AGENT: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML,

like Gecko) Chrome/78.0.3904.108 Safari/537.36

V2ex

爬虫地址:http://crawlab.cn/demo#/spiders/5e27dd67b8f9c90019f42ad9

version: 0.4.4

engine: scrapy

start_url: https://v2ex.com/

还在焦头烂额裸写Scrapy?这个神器让你90秒内配好一个爬虫

start_stage: list

stages:

- name: list

is_list: true

list_css: .cell.item

list_xpath: ""

page_css: ""

page_xpath: ""

page_attr: href

fields:

- name: title

css: a.topic-link

xpath: ""

attr: ""

next_stage: ""

remark: ""

- name: url

css: a.topic-link

xpath: ""

attr: href

next_stage: detail

remark: ""

- name: replies

css: .count_livid

xpath: ""

attr: ""

next_stage: ""

remark: ""

- name: detail

is_list: false

list_css: ""

list_xpath: ""

page_css: ""

page_xpath: ""

page_attr: ""

fields:

- name: content

css: ""

xpath: .//*[@class="markdown_body"]

attr: ""

next_stage: ""

remark: ""

settings:

AUTOTHROTTLE_ENABLED: "true"

ROBOTSTXT_OBEY: "false"

USER_AGENT: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML,

like Gecko) Chrome/79.0.3945.117 Safari/537.36

36氪

爬虫地址:http://crawlab.cn/demo#/spiders/5e27ec82b8f9c90019f42b59

version: 0.4.4

engine: scrapy

start_url: https://36kr.com/information/web_news

start_stage: list

stages:

- name: list

is_list: true

list_css: .kr-flow-article-item

list_xpath: ""

page_css: ""

page_xpath: ""

page_attr: ""

fields:

- name: title

css: .article-item-title

xpath: ""

attr: ""

next_stage: ""

remark: ""

- name: url

css: body

xpath: ""

attr: href

next_stage: detail

remark: ""

- name: abstract

css: body

xpath: ""

attr: ""

next_stage: ""

remark: ""

- name: author

css: .kr-flow-bar-author

xpath: ""

attr: ""

next_stage: ""

remark: ""

- name: time

css: .kr-flow-bar-time

xpath: ""

attr: ""

next_stage: ""

remark: ""

- name: detail

is_list: false

list_css: ""

list_xpath: ""

page_css: ""

page_xpath: ""

page_attr: ""

fields:

- name: content

css: ""

xpath: .//*[@class="common-width content articleDetailContent kr-rich-text-wrapper"]

attr: ""

next_stage: ""

remark: ""

settings:

ROBOTSTXT_OBEY: "false"

USER_AGENT: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML,

like Gecko) Chrome/78.0.3904.108 Safari/537.36

实战爬虫一览

总结

要注意的是,不遵守 robots.txt 可能会造成法律风险,本文的实战爬虫均为学习交流用,切勿作为生产环境,任何滥用者自行承担法律责任。

参考

Github: https://github.com/crawlab-team/crawlab

Demo: http://crawlab.cn/demo

文档: http://docs.crawlab.cn/

Go Scrapy Python

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Python爬虫:头条小姐姐们都来给你拜年啦!
下一篇:ROS连接ABB机械臂调试详细教程-ROS(indigo)和ABB RobotStudio 6.03.02-
相关文章