scrapy分页抓取网页(开发好一个框架爬虫(ConfigurableSpider)生产可用的Scrapy爬虫)
优采云 发布时间: 2022-03-03 14:15scrapy分页抓取网页(开发好一个框架爬虫(ConfigurableSpider)生产可用的Scrapy爬虫)
背景
爬虫是个有趣的东西,它可以让你通过爬虫程序自动抓取网上的信息,省去了很多手动操作。在一些优质的爬虫框架出来之前,开发者还是通过简单的网络请求+网页解析器来开发爬虫程序,比如Python的requests+BeautifulSoup,而高级爬虫程序还会加入数据存储模块,比如MySQL、MongoDB。这种方式开发效率低,稳定性差,开发一个完整的、可生产的爬虫可能需要几个小时。我称这种方法为无框架爬虫。
2011年,基于Twisted的Scrapy爬虫框架诞生,一下子为大众所熟知,成为首屈一指的全能高性能异步爬虫框架。Scrapy 抽象了几个核心模块,让开发者可以专注于爬虫的爬取逻辑,而不是数据下载、页面解析、任务调度等比较繁琐的模块。要开发一个生产就绪的 Scrapy 爬虫,简单的可能只需要十分钟,复杂的可能需要一个多小时。当然,我们还有很多其他优秀的框架,比如PySpider、Colly等,我把这种爬虫叫做框架爬虫。框架爬虫解放生产力,现在很多公司改造框架爬虫,应用到生产环境中,*敏*感*词*抓取数据。
但是,对于需要抓取数百个网站的爬虫的需求,框架爬虫可能会不堪重负,不足,编写爬虫成为了一项手工工作。例如,如果开发一个框架爬虫平均需要20分钟,如果一个全职爬虫开发人员每天工作8小时,那么需要20000分钟,333小时,42个工作日,将近2个开发1000个< @网站 月亮。当然,我们可以聘请10名全职爬虫开发工程师,但也需要4个工作日才能完成(如下图)。
这也是相对低效的。为了克服这个效率问题,可配置爬虫应运而生。
可配置爬虫简介
A Configurable Spider,顾名思义,就是可以配置爬取规则的蜘蛛。可配置爬虫是一种高度抽象的爬虫程序。开发者无需编写爬虫代码,只需将需要爬取的网页地址、字段、属性写在配置文件或数据库中,让专门的爬虫程序根据配置抓取数据。. 可配置爬虫进一步将爬虫代码抽象为配置信息,简化了爬虫开发过程。爬虫开发者只需要做相应的配置即可完成爬虫的开发。因此,开发者可以通过可配置爬虫来*敏*感*词*编写爬虫程序(如下图所示)。
这种方法可以爬取上百个网站,一个熟练的爬虫配置者一天可以配置1000个新闻网站爬虫。这对于需要舆情监控的企业来说非常重要,因为可配置爬虫提高生产力,降低单位工作时间成本,提高开发效率,方便后续舆情分析和人工智能产品开发。很多公司自己开发可配置爬虫(名字可能不一样,但本质是一回事),然后聘请一些爬虫配置人员负责配置爬虫。
市场上没有很多免费和开源的可配置爬虫框架。早前微软大神崔庆才开发的Gerapy属于爬虫管理平台,可以根据配置规则生成Scrapy项目文件。另一个比较新的可配置爬虫框架是Crawlab(其实Crawlab并不是一个可配置爬虫框架,而是一个高度灵活的爬虫管理平台),发布于v0.4.0。配置爬虫。还有一个基于Golang的开源框架,Ferret,很有意思。编写爬虫就像编写 SQL 一样简单。还有一些其他的商用产品,但是根据用户反馈,感觉不是很专业,不能满足生产需求。
可配置爬虫的诞生,主要是由于爬虫的模式比较简单,无非就是列表页+详情页的组合(如下图),或者只是一个列表页。当然,还有稍微复杂的通用爬虫,也可以通过规则配置来完成。
Crawlab 可配置爬虫
今天我们主要介绍的是Crawlab的可配置爬虫。我们在前面的 文章 中介绍了它,但没有深入探讨如何在实践中应用它。今天,我们重点讲解。如果您对 Crawlabb 的可配置爬虫不熟悉,请参考可配置爬虫的文档。
可配置的爬虫战斗
实战部分所有案例均由作者使用Crawlab官方Demo平台通过可配置爬虫功能编写爬取,涵盖新闻、金融、汽车、图书、视频、搜索引擎、程序员社区等领域(见下图) . 下面将介绍其中的几个。所有示例均在官方Demo平台上,您可以通过注册账号登录查看。
百度(搜索“Crawlab”)
爬虫地址:/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(最新的 文章)
爬虫地址:/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
抓取结果
亚马逊中国(搜索“手机”)
爬虫地址:/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
爬虫地址:/demo#/spiders/5e27dd67b8f9c90019f42ad9
爬虫配置
蜘蛛文件
version: 0.4.4
engine: scrapy
start_url: https://v2ex.com/
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氪
爬虫地址:/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
抓取结果
实际爬行动物列表
爬虫名称 | 爬虫类 --- | --- 百度 | List Page + Paging SegmentFault | 列表页 CSDN | 列表页面 + 分页 + 详细信息页面 V2ex | 列表页+详情页纵横| 列表页 亚马逊中国 | 列表页+寻呼雪球网| 列表页+详情页 列表页+分页豆瓣阅读 | 列表页36氪| 列表页+详情页腾讯视频| 列表页
总结
Crawlab 的可配置爬虫非常方便,可以让程序员快速配置自己需要的爬虫。笔者配置上述11个爬虫用了不到40分钟(考虑到里面有反爬调试),几个比较简单的爬虫不到1-2分钟就配置好了。而且作者没有写一行代码,所有的配置都是在界面上完成的。而且Crawlab的可配置爬虫不仅支持界面上的配置,还支持写一个Yaml文件Spiderfile来完成配置(其实所有的配置都可以映射到Spiderfile)。Crawlab 的可配置爬虫基于 Scrapy,因此它支持 Scrapy 的大部分功能。可以通过设置配置可配置爬虫的扩展属性,包括USER_AGENT,ROBOTSTXT_OBEY 等等。为什么选择 Crawlab 作为可配置爬虫的首选?因为Crawlab可配置爬虫不仅可以配置爬虫,还可以享受Crawlab爬虫管理平台的核心功能,包括任务调度、任务监控、定时任务、日志管理、消息通知等实用功能。在后续的开发中,Crawlab开发团队将继续完善可配置爬虫,支持更*敏*感*词*,包括动态内容、更多引擎、CrawlSpider的实现等。日志管理、消息通知等实用功能。在后续的开发中,Crawlab开发团队将继续完善可配置爬虫,支持更*敏*感*词*,包括动态内容、更多引擎、CrawlSpider的实现等。日志管理、消息通知等实用功能。在后续的开发中,Crawlab开发团队将继续完善可配置爬虫,支持更*敏*感*词*,包括动态内容、更多引擎、CrawlSpider的实现等。
需要注意的是,不遵守 robots.txt 可能会带来法律风险。本文实际爬虫仅供学习交流,不作为生产环境使用,任何滥用者均需承担法律责任。
参考
如果您觉得Crawlab对您的日常开发或公司有帮助,请加作者微信tikazyq1并注明“Crawlab”,作者拉你进群。欢迎在 Github 上加星,如果您遇到任何问题,请随时在 Github 上提出问题。此外,欢迎您为 Crawlab 做出开发贡献。