Python爬虫框架-scrapy的使用

论坛 期权论坛 脚本     
niminba   2021-5-23 03:28   1159   0

Scrapy

  • Scrapy是纯python实现的一个为了爬取网站数据、提取结构性数据而编写的应用框架。
  • Scrapy使用了Twisted异步网络框架来处理网络通讯,可以加快我们的下载速度,并且包含了各种中间件接口,可以灵活的完成各种需求

1、安装

sudo pip3 install scrapy

2、认识scrapy框架

2.1 scrapy架构图

  • Scrapy Engine(引擎): 负责SpiderItemPipelineDownloaderScheduler中间的通讯,信号、数据传递等。
  • Scheduler(调度器): 它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队列,当引擎需要时,交还给引擎
  • Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理
  • Spider(爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器)
  • Item Pipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方.
  • Downloader Middlewares(下载中间件):你可以当作是一个可以自定义扩展下载功能的组件
  • Spider Middlewares(Spider中间件):可以理解为是一个可以自定扩展和操作引擎Spider中间通信的功能组件(比如进入Spider的Responses和从Spider出去的Requests)

2.2 Scrapy运行的大体流程:

1.引擎从spider拿到第一个需要处理的URL,并将request请求交给调度器。

2.调度器拿到request请求后,按照一定的方式进行整理排列,入队列,并将处理好的request请求返回给引擎。

3.引擎通知下载器,按照下载中间件的设置去下载这个request请求。

4.下载器下载request请求,并将获取到的response按照下载中间件进行处理,然后后交还给引擎,由引擎交给spider来处理。对于下载失败的request,引擎会通知调度器进行记录,待会重新下载。

5.spider拿到response,并调用回调函数(默认调用parse函数)去进行处理,并将提取到的Item数据和需要跟进的URL交给引擎。

6.引擎将item数据交给管道进行处理,将需要跟进的URL交给调度器,然后开始循环,直到调度器中不存在任何request,整个程序才会终止。

2.3 制作scrapy爬虫步骤:

1.创建项目:通过(scrapy startproject 项目名)来创建一个项目

2.明确目标:编写items.py文件,定义提取的Item

3.制作爬虫:编写spiders/xx.py文件,爬取网站并提取Item

4.存储内容:编写pipelines.py文件,设计管道来存储提取到的Item(即数据)

3、入门教程

3.1 创建项目在开始爬虫之前,第一步需要创建一个项目。先进入打算存储代码的目录,运行以下命令:

scrapy startproject myProject

其中myProject为项目名,运行上述命令后,在当前目录下会创建一个myProject目录,该目录包含以下内容:

.
├── myProject
│   ├── __init__.py
│   ├── items.py
│   ├── middlewares.py
│   ├── pipelines.py
│   ├── settings.py
│   └── spiders
│       └── __init__.py
└── scrapy.cfg

scrapy.cfg:项目的配置文件

myProject/items.py:项目中的目标文件

myProject/middlewares.py:项目中的中间件文件

myProject/pipelines.py:项目中的管道文件

myProject/settings.py:项目中的设置文件

myProject/spiders:放置spider代码的目录

3.2 明确目标(定义Item)

我们打算抓取网站http://www.itcast.cn/channel/teacher.shtml里所有老师的姓名、职称、入职时间和个人简介:

  • 首先打开myProject/items.py文件
  • Item是保存爬取到的数据的容器,其使用方法和python字典类似
  • 创建一个scrapy.Item 类, 并且定义类型为 scrapy.Field的类属性来定义一个Item(类似于ORM的映射关系)
  • 创建一个MyprojectItdK>yfРТFVb&5VW7B6V&WVW7B7FW"ТW6W%&6U4U%>XiW6W"vV&7B66VvWBw&7Br6Т&&6&7B>XiТ&WVW7BFW'2FFVfV%W6W"vV6W%>W6W"vV&WVW7BFw&GG&vusr7G"&w>KyJK>yf&SУFcУ6WGFih~KnXУb673&66У&R673''W6#Т>zhyJ6W0Ф4U5$BfPРТ>K[nDT0РТ>k{Xz[{XiyNKK{NKn{ФD%Dt$U2Тv&BFFv&W2&DF$FFv&RsSC2Т>k{XU4U"tTХU4U%Т$6F&Rvw2bvcCG&FVRB423s#B423s#B4"Ss#sF6V"2b"$6F&Rvw2bG&FVBtG&FVB43#B4"Ss#sB423s#B423s#B43sSB4C3#""$6F&Rrvw2RB4C3##B4"Ss#sFB42CSb"$vw3Svw2RvV$BDRvV6f&&6#r3Ff#3"$SV2vV$BDRvV6f&&$vw3Svw2RV3'c&RvV6s#R$vw3Svw2R'cvV6sRf&Vf"$ccSvV6s3#"V6RТУFcУjX[>KFjni67&yNKyJyNih~z[ K{NZIyX[5Fjni7&KyJXh^Z{J.zKK^XNih~zhn{~{XyNyX[>ih~z[ZJ~Z^YZIiJ
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1060120
帖子:212021
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP