总目录:https://blog.csdn.net/qq_41106844/article/details/105553392
Python-爬虫 - 子目录:https://blog.csdn.net/qq_41106844/article/details/105553319
文档:https://scrapy-chs.readthedocs.io/zh_CN/latest/intro/overview.html
我们就先说说 scrapy是个啥,原理是啥样的。
scrapy的架构
角色
ScrapyEngine:引擎。负责控制数据流在系统中所有组件中流动,并在相应动作发生时触发事件。 此组件相当于爬虫的“大脑”,是 整个爬虫的调度中心。
Schedule:调度器。接收从引擎发过来的requests,并将他们入队。初始爬取url和后续在页面里爬到的待爬取url放入调度器中,等待被爬取。调度器会自动去掉重复的url。
Downloader:下载器。负责获取页面数据,并提供给引擎,而后提供给spider。
Spider:爬虫。用户编些用于分析response并提取item和额外跟进的url。将额外跟进的url提交给ScrapyEngine,加入到Schedule中。将每个spider负责处理一个特定(或 一些)网站。
ItemPipeline:负责处理被spider提取出来的item。当页面被爬虫解析所需的数据存入Item后,将被发送到Pipeline,并经过设置好次序
DownloaderMiddlewares:下载中间件。是在引擎和下载器之间的特定钩子(specific hook),处理它们之间的请求(request)和响应(response)。提供了一个简单的机制,通过插入自定义代码来扩展Scrapy功能。通过设置DownloaderMiddlewares来实现爬虫自动更换user-agent,IP等。
SpiderMiddlewares:Spider中间件。是在引擎和Spider之间的特定钩子(specific hook),处理spider的输入(response)和输出(items或requests)。提供了同样简单机制,通过插入自定义代码来扩展Scrapy功能。
数据流
1.ScrapyEngine打开一个网站,找到处理该网站的Spider,并向该Spider请求第一个(批)要爬取的url(s);
2.ScrapyEngine向调度器请求第一个要爬取的url,并加入到Schedule作为请求以备调度;
3.ScrapyEngine向调度器请求下一个要爬取的url;
4.Schedule返回下一个要爬取的url给ScrapyEngine,ScrapyEngine通过DownloaderMiddlewares将url转发给Downloader;
5.页面下载完毕,Downloader生成一个页面的Response,通过DownloaderMiddlewares发送给ScrapyEngine;
6.ScrapyEngine从Downloader中接收到Response,通过SpiderMiddlewares发送给Spider处理;
7.Spider处理Response并返回提取到的Item以及新的Request给ScrapyEngine;
8.ScrapyEngine将Spider返回的Item交给ItemPipeline,将Spider返回的Request交给Schedule进行从第二步开始的重复操作,直到调度器中没有待处理的Request,ScrapyEngine关闭。
安装
安装wheel支持:
pip install wheel
安装scrapy框架:
pip install scrapy
window下,为了避免windows编译安装twisted依赖,安装下面的二进制包
pip install Twisted-18.4.0-cp35-cp35m-win_amd64.whl
创建
在某路径下创建scrapy项目
scrapy startproject project_name
进入项目
cd project_name
建立一个爬虫
scrapy genspider spider_name url
命令
创建项目
scrapy startproject Project_name
创建爬虫
scrapy genspider Spider_name url
了解各类模板
scrapy genspider -l
运行爬虫
scrapy crawl Spider_name
检查代码是否有错误
scrapy check Spider_name
保存成本地文件
scrapy crawl field -o 文件名 -t 类型
下面是第一次系统学习scrapy后的笔记:
爬取囧百的demo:
https://github.com/hanxuan-doco/python_pc/tree/master/Crawler/demo
爬取豆瓣电影的demo:
https://github.com/hanxuan-doco/python_pc/tree/master/Crawler/db_dy_demo
模拟登录的demo:
https://github.com/hanxuan-doco/python_pc/tree/master/Crawler/data_dl_demo