scrapy分页抓取网页(开发好一个框架爬虫(ConfigurableSpider)生产可用的Scrapy爬虫)

优采云 发布时间: 2022-03-03 14:15

  scrapy分页抓取网页(开发好一个框架爬虫(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 做出开发贡献。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线