爬虫主流框架分享——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地址,引擎就把地址再次交给调度器入队列,如果不包含就将数据交给项目管道对数据进行处理(保存等)
图示:
scrapy 爬虫文件结构
创建爬虫项目指令:scrapy startproject 爬虫项目文件名
文件结构图示:
注意:spiders是一个文件夹,不是py文件,里面存放爬虫组件相关的文件
利用scrapy创建一个蜘蛛爬虫流程
第一步(创建一个爬虫项目):scrapy startproject 爬虫文件名
第二步(进入到这个爬虫文件内):cd 爬虫文件名
第三步(在爬虫项目文件内创建一个真的蜘蛛爬虫):scrapy genspider 蜘蛛爬虫名 蜘蛛爬虫待爬取网站域名
注意:
1:安装好scrapy后,在哪个文件夹下面都可以创建爬虫项目
2:通过第三步创建真的蜘蛛爬虫文件,就是Scrapy五大组件中的爬虫组件
3:爬虫待抓取的网站域名,是以 www. 开头的,也就是去掉协议以及资源路径的地址!
示例:
Scrapy文件详解
真的爬虫文件(爬虫组件)中代码的含义
settings.py全局爬虫配置文件内参数详解
底层代码理解scrapy爬虫框架的运行流程
真的爬虫文件怎么解析提取目标数据
注意事项:
1:response对象调用xapth方法获得的是列表内嵌套的选择器对象,不是目标字符串,想要获取字符串,就要在后面加上get()方法
2:在后面加上extract()方法就是将所有选择器对象中的字符串存到列表内!
3:选择器对象的get方法是获取列表内第一个选择器的文本内容!!!
怎么在终端以及Pycharm中运行scrapy写好的爬虫
终端运行指令:回到爬虫目录文件夹处,键入指令 scrapy crawl 真的爬虫文件名(不带py后缀)
pycharm运行:在爬虫文件夹根目录新建一个 run.py 文件,文件内代码如下即可运行写好的爬虫!