一, 介绍: scrapy是一个专业的,高效的爬虫框架, 它使用专业的Twisted包高效的处理网络通信, 使用lxml(专业的XML处理包),cssselect 高效的提取HTML页面的有效信息, 同时它也提供了有效的线程管理, 爬虫框架 是实现爬虫功能的一个软件结构和功能组件集合, 爬虫框架是一个半成品, 能够帮助用户实现专业的网络爬虫
二, 安装: pipenv install scrapy
三,结构: 5+2 结构
5个模块分别是: engine模块 + spiders模块(框架入口)+ scheduler模块+ downloader模块+ item pipelines(框架出口)模块
2个中间件分别是: spiderMiddleware 和 downloaderMiddleware
3条数据流路径:
1️⃣:spiders模块经过engine模块到达scheduler模块(request请求)
2️⃣: scheduler模块通过engine模块 到达downloader模块, 将数据返回给spider模块
3️⃣spider模块通过engine模块分别达到item pipelines模块 和 scheduler模块
三,
1)engine模块功能:(整个框架核心, 控制所有模块的数据流, 根据条件触发事件)
2)downloader模块:(根据请求下载网页)
3)scheduler: 负责调度
4)item pipelines 模块: 以流水线的方式处理spider产生的爬取项,由一组操作顺序组成,类似流水线, 每个操作是一个item Piplines类型(可能操作包括:清理,检验,和查重爬取项中的HTML数据,将数据存储到数据库)
5)spider: 解析Downloader返回的响应(Response), 产生爬取项 , 产生额外的爬取请求(Request)
四,Downloader Middleware:
目的: 实施Engine,scheduler和downloader之间进行用户可配置的控制
功能: 修改,丢弃,新增请求或响应 用户可以编辑可配置代码
五:Spider Middleware:
目的: 对请求和爬取项的在处理
功能: 修改,丢弃,新增请求或爬取项
六, requests库和Scrapy爬虫的比较
相同点:
1)两者都可以进行页面请求和爬取, Python爬虫的两个重要技术路线
2)两者可用性都好,文档丰富,入门简单
3)两者都没有处理js,提交表单,应对验证码等功能
不同点:
1)requests是页面级爬虫, scrapy是网站级爬虫
2)requests功能库, scrapy是框架
3)requests并发性考虑不足,性能较差, scrapy并发性好,性能高
4)requests重点在于页面下载, scrapy重点在于爬虫结构
5)requests定制灵活, scrapy一般定制灵活,深度定制困难
6)requests上手十分简单, scrapy入门稍难
选用那个技术路线实现爬虫?
1)非常小的需求, requests库
2)不太小的需求, scrapy框架
3)定制程度很高的需求(不考虑规模),自搭框架, requests>scrapy
七, scrapy的常用命令:
1)scrapy startproject 创建一个新工程
2)scrapy genspider + demo(爬虫名字) + python123.io(爬取域名) 创建一个爬虫
3)scrapy settings 获得爬虫配置信息
4)scrapy crawl 运行一个爬虫
5)scrapy list 列出工程中所有爬虫
6)scrapy shell 启动url调试命令行