Scrapy爬虫框架结构及实例

Scrapy框架

Scrapy介绍

爬虫相关框架有很多,scrapy是目前python中使用最广泛的框架,主要是它的相关扩展组件很多,可配置和可扩展性非常高。
Scrapy是一个基于Twisted的异步处理框架,是纯python实现的爬虫框架,使用它我们只需定制开发几个模块就可以轻松实现一个爬虫。

Scrapy框架组件,数据流及项目结构介绍

在这里插入图片描述
1.组件

  • Engine: 引擎,处理整个系统的数据流处理,触发事务,是整个框架的核心。
  • item: 项目,它定义了爬取结果的数据结构,爬取的数据会被赋值成该item对象。
  • Scheduler: 调度器,介绍引擎发过来的请求并将其加入队列中,在引擎再次请求的时候将请求提供个引擎。
  • Downloader: 下载器,下载网页内容,并将网页内容返回给蜘蛛。
  • Spiders: 蜘蛛,其内定义了爬取的逻辑和网页的解析规则,它主要负责解析响应并生成提取结果和新的请求。
  • Item Pipeline: 项目管道,负责处理由蜘蛛从网页中抽取的项目,它的主要任务是清洗,验证和存储数据。
  • Downloader Middlewares.下载器中间件,位于引擎和下载器之间的钩子框架,主要处理引擎与下载器之间的请求及响应。
  • Spider Middlewares: 蜘蛛中间件,位于引擎和蜘蛛之间的钩子框架,主要处理想蜘蛛输入的响应和输出的结果及新的请求。

2.数据流

  1. Engine 首先打开一个网站,找到处理该网站的Spider,并向该Spider请求第一个要爬取的URL.
  2. Engine 从Spider获取到第一个要爬取的URL,并通过Scheduler以Request的形式调度。
  3. Engine 向Scheduler请求下一个要爬取的URL。
  4. Scheduler返回下一个要爬取的URL给Engine,Engine将URL通过Downloader Middlewares转发给Downloader下载。
  5. 一旦页面下载完毕,Downloader生成该页面的Response,并将其通过Downloader Middlewares发送给Engine.
  6. Engine从下载器中接受到Response,并将其通过Spider Middlewares发送给Spider处理。
  7. Spider处理Response,并返回提取到的Item及新的Request给Engine.
  8. Engine将Spider返回的Item给Item Pipeline,将新的Request给Scheduler.
  9. 重复(2)步到第(8)步,知道Scheduler中没有更多的Request,Engine关闭该网站,爬取结束。

通过这些组件之间的协作和对异步处理的支持,Scrapy最大限度地利用了网络带宽,很大程度上提高了数据获取的效率。

3.项目结构
scrapy与其他框架不同之处在于,它是通过命令行来创建项目,创建完之后可以用IDE打开项目编写代码。创建项目代码及结构展示:

创建项目

生成项目(自动创建scrapy相关文件)
整体项目结构
在这里插入图片描述
各个文件的更能描述:

  • Scrapy.cfg: 它是Scrapy项目的配置文件,定义了项目的配置文件路径,部署相关信息等内容。
  • items.py: 它定义Item数据结构,所有的Item的定义都可以放在这里。(类似于Java中的Beam)
  • pipelines.py: 它定义Item Pipeline的实现,所有的Item Pipeline的实现都在这里。
  • settings.py: 它定义项目的全局配置。
  • middlewares.py: 它定义Spider Middlewares 和 Downloader Middlewares的实现。
  • spiders: 其内包含一个个Spider的实现,每个Spider都有一个文件。

这是Scrapy框架的基本架构,数据流及项目结构。

爬取天堂图片网实例:

创建项目:
在这里插入图片描述
生成项目:

在这里插入图片描述
需要进入刚刚创建的项目目录下。

通过IDE打开项目编写代码:

在爬之前先想好你需要什么,然后在item中定义相关变量。
在这里插入图片描述

这一步最关键,写出爬取网站的逻辑,爬取的相关函数可以查看Scrapy的相关文档。同样也可以用BeautifulSoup或正则都可以。
在这里插入图片描述
在Settings.py中设置一些反爬配置,比如Robots协议,cookies,User-Agent,让服务器认为你是正常访问的,而不是爬虫。
在这里插入图片描述
在这里插入图片描述

最后在命令行中输入运行命令:
53, 3851)}
2021-06-06 19:37:16 [scrapy.core.engine] INFO: Spider closed (shutdown)

C:\Users\24847\crawlpicture>scrapy crawl ivsky

得到了相关图片信息:
2021-06-06 19:37:16 [scrapy.core.scraper] DEBUG: Scraped from <200 https://www.ivsky.com/tupian/ziranfengguang/index_41.html>
{‘picturesrc’: ‘//img.ivsky.com/img/tupian/li/201807/16/ziran_fengjing-005.jpg’,
‘title’: ‘美丽的自然风景图片(12张)’}
2021-06-06 19:37:16 [scrapy.core.scraper] DEBUG: Scraped from <200 https://www.ivsky.com/tupian/ziranfengguang/index_41.html>
{‘picturesrc’: ‘//img.ivsky.com/img/tupian/li/201807/16/junqiaodexueshantupian-008.jpg’,
‘title’: ‘峻峭的雪山图片(10张)’}

还有一些获取后直接存入文件的命令:
例:
C:\Users\24847\crawlpicture>scrapy crawl ivsky -o ivsky.csv

在这里插入图片描述
将相关数据存入csv文件中。

总结:

介绍了Scrapy框架相关理论和实例,Scrapy有很多组件,可以看到该实例写很少的代码就可以爬取相关数据。并且不同于requests,Scrapy已经为我们整理好了架构,我们只需关注需要什么数据和编写逻辑就好了。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值