爬虫主流框架分享——Scrapy【第一期】

这一期文章记录自己从接触 Scrapy 框架到了解框架基本五大组件再到最后利用 Scrapy + scrapy_redis 部署分布式的过程,同样也是一起 Scrapy 的教程,加深自己对 Scrapy 框架的理解!开始!

什么是Scrapy

答:scrapy框架是爬虫框架,它使用Twisted异步网络库来处理网络请求(多任务),使用scrapy可以高效(爬取效率和开发效率)的完成数据的爬取

怎么安装Scrapy

Windows:pip install Scrapy
ubuntu:pip3 install Scrapy

scrapy 框架的五大组件功能及 scrapy 框架的工作流程

五大组件加上两大中间件

引擎组件(Scrapy Engine):Scrapy框架的核心,负责其他组件之间的通信等

爬虫组件(Spiders):负责目标数据的解析提取并将数据交给项目管道,如果提取的数据含有继续跟进的二级链接,就把二级链接交给引擎循环!

调度器组件(Scheduler):负责将待请求的url入队列,在出队列(交给引擎),出队列之前为这个url建立指纹,防止重复抓取

下载器组件(Downloader):负责向目标url发送请求,并且向引擎返回 responses(响应对象)

项目管道组件(Item Pipeline):负责处理在爬虫组件获得的数据!

下载器中间件(Downloader Middlewares):处在调度器组件与下载器组件中间,调度器将目标url出队列,还未送到下载器获取响应对象之前,被下载器中间件拦下,在下载器中间件你可以对请求进行包装(User-Agent等),然后再将包装好的传到下载器组件

爬虫中间件(Spiders Middlewares):处在引擎组件以及爬虫组件之间,可以修改响应状态码等,一般不做修改

工作流程

文字描述:项目开始后,引擎先向爬虫文件索要第一批待爬取的请求地址,交给调度器入队列,调度器在将地址出队列交给引擎(已经建立好指纹),引擎将地址在交给下载器,下载器向网站服务器发送请求,获取响应对象再次给引擎,引擎将响应对象交给爬虫文件,爬虫文件开始进行数据的解析提取并将数据交给引擎,如果解析的数据中包含继续跟进的url地址,引擎就把地址再次交给调度器入队列,如果不包含就将数据交给项目管道对数据进行处理(保存等)

图示:

Snipaste_2021-06-18_09-58-15

scrapy 爬虫文件结构

创建爬虫项目指令:scrapy startproject 爬虫项目文件名

文件结构图示:

Snipaste_2021-07-02_09-59-41

注意:spiders是一个文件夹,不是py文件,里面存放爬虫组件相关的文件

利用scrapy创建一个蜘蛛爬虫流程

第一步(创建一个爬虫项目):scrapy startproject 爬虫文件名

第二步(进入到这个爬虫文件内):cd 爬虫文件名

第三步(在爬虫项目文件内创建一个真的蜘蛛爬虫):scrapy genspider 蜘蛛爬虫名 蜘蛛爬虫待爬取网站域名

注意:
1:安装好scrapy后,在哪个文件夹下面都可以创建爬虫项目
2:通过第三步创建真的蜘蛛爬虫文件,就是Scrapy五大组件中的爬虫组件
3:爬虫待抓取的网站域名,是以 www. 开头的,也就是去掉协议以及资源路径的地址!

示例:

Scrapy文件详解

真的爬虫文件(爬虫组件)中代码的含义

Snipaste_2021-07-02_11-26-07

settings.py全局爬虫配置文件内参数详解

image-20211006150433785

底层代码理解scrapy爬虫框架的运行流程

image-20211006150524420

真的爬虫文件怎么解析提取目标数据

image-20211006150728811

注意事项:

1:response对象调用xapth方法获得的是列表内嵌套的选择器对象,不是目标字符串,想要获取字符串,就要在后面加上get()方法

2:在后面加上extract()方法就是将所有选择器对象中的字符串存到列表内!

3:选择器对象的get方法是获取列表内第一个选择器的文本内容!!!

怎么在终端以及Pycharm中运行scrapy写好的爬虫

终端运行指令:回到爬虫目录文件夹处,键入指令 scrapy crawl 真的爬虫文件名(不带py后缀)

image-20211006150924461

pycharm运行:在爬虫文件夹根目录新建一个 run.py 文件,文件内代码如下即可运行写好的爬虫!

image-20211006150953636