要想使用scrapy框架,首先要理解运行的原理
Scrapy Engine(引擎): 负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等
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)
爬虫分为普通爬虫和通用爬虫
普通爬虫的使用
1.新建项目
···scrapy startproject myspider```
2.创建爬虫文件
···scrapy genspider name yuming.com···
打开文件之后对setting进行设置
(1)ROBOTSTXT_OBEY = False
(2)COOKIES_ENABLED = False
(3)在默认请求头里面进行user_agent等一系列的设置
(4)打开管道的借口
(5)DOWNLOAD_DELAY = 3 设置下载延时
3.####我们要找到目标url
例如爬取一个网站https://www.baidu.com/
(1)进入页面找到目标url
https://www.baidu.com/?page=1
(2)为了爬取所有页面,需要爬取当前页面所有的分页url yield给调度器
yield scrapy.Ruquest(url='分页url',)
(2)在item.py里面编辑需要爬取的字段名称
(3)进入爬虫文件,在解析函数下进行内容的爬取
(4)把爬取到的数据yield item交给管道
(5)在pip文件里进行数据持久化的存储
通用爬虫
适合爬取一些分页有规律的网站与普通爬虫大体相同
(1)通用爬虫创建项目:
···scrapy genspider -t crawl 爬虫文件 域名···
(2)创建规则
···rules = (
Rule(LinkExtractor(allow=r'.*?p=\d+',restrict_xpaths=('//div[@class="pages"]')), callback='parse_item', follow=True,),
)···
(3)与普通爬虫解析的差别
需要重写···def parse_start_url(self, response):
[]···
(4)不能重写parse方法,这是系统内部的需求。
网友评论