scrapy 爬虫框架
- 框架-
- 爬虫框架
- scrapy
- pyspider
- crawley
一、scrapy框架介绍
- 官方网址:https://doc.scrapy.org/en/latest
- 中文:http://scrapy-chs.readthedocs.io/zh_CN/latest/index.html
- 安装
- 利用pip install scrapy
1、概述
- 1、包含各个部件
- ScrapyEngine:神经中枢,大脑
- Scheduler:调度器,引擎发来的request请求,调度器需要处理,然后交换引擎
- Downloader:下载器,把引擎发来的request发出请求,得到response
- Spider:爬虫,负责把下载器得到的网页/结果进行分解,分解成数据+连接
- ItemPipeline:管道,详细处理Item
- DownloaderMiddleware:下载中间件,自定义下载的功能扩展组件
- SpiderMiddleware:爬虫中间件,,对Spider进行功能扩展
- 2、各模块的作用
- ItemPipeline:
- 爬虫提取出数据存入item后,item中保存的数据需要进一步处理,比如清洗,去重,存储等
- pipeline需要处理process_item函数
- process_item:
spider提取出来的item作为参数传入,同时出入的还有spider
此方法必须实现
必须返回一个Item对象,被丢弃的item不会被之后的pipeline处理 - init:构造函数
- 进行一些必要的参数初始化
- open_spider(spider):
- spider对象被开启的时候调用
- close_spider(spider)
- spider对象被关闭的时候调用
- Spider
- 对应的的是文件夹spider下的文件
- init:初始化爬虫的名称,star_urls列表
- start_requests:生成Requests对象交给Scrapy下载并返回response
- parse:根据返回的response解析出相应的item,item自动进入pipeline,如果需要,解析出url,url自动交给requests模块,一直循环下去
- start_request:此方法仅能被调用一次,读取star_urls内容并启动循环过程
- name:设置爬虫名称
- start_urls:设置开始第一批爬去的url
- allow_domains:spider允许爬去的域名列表 -
- log:日志记录
- 爬虫项目大概流程
1、新建项目:spider startproject xxx
2、明确需要目标/产出:编写item.py
3、制作爬虫:地址 spider/xxspider.py
4、存储内容:pipelines.py
- ItemPipeline:
2、中间件(DownloaderMiddlewares)
- 中间件是处于引擎和下载器中间的一层组件
- 可以有很多个,被按照顺序加载执行
- 作用是对发出的请求和返回的结果进行预处理
- 在middlewares中
- 需要在settings中设置加以生效
- 一般一个中间件只完成一个任务
- 必须实现以下一个或者多个方法
- process_request(self,request,spider)
在request通过的时候被调用
必须返回None或Response或Request或raise IgreRequest
None:scrapy继续处理该request
Request:scrapy会停止调用process_request并冲洗调度返回的request
Response:scrapy不会调用其他的process_request或process_exception,直接将该response作为结果处理,同时会调用process_response函数 - process_response(self,request,response,spider)
跟process_request大同小异
每次返回结果的时候会自动调用
可以有多个,按顺序调用
- process_request(self,request,spider)
3、去重
- 为了防止爬虫陷入死循环,需要去重
- 即在spider中的parse函数中,返回Request的时候加上dont_filter=False
4、如何在scrapy中使用selenium
- 可以放在中间件中的process_request函数中- 在函数调用selenium,完成爬去后返回Response
5、scrapy shell
- 网址:https://segmentfault.com/a/1190000013199636?utm_source=tag-newest
- shell
- 启动
- windows:scrapy shell “urlxxxxxx”
- 启动后自动下载指定的url的网页
- 下载后,url的内容保存在response的变量中,如果需要,我们可以调用response
- response
- 爬去到的内容保存在response中
- response.body:是网页的页码
- response.headers:是返回的HTTP的头信息
- response.xpath:允许使用Xpath语法选择内容
- response.css:允许使用css语法选择内容
- selectro
- 选择器:允许用户使用选择器选择自己想要内容
- response.selector.xpath:response.xpath是其的缩写
- response.selector.css:response.css是其的缩写
- selector.re:允许用户提供正则选择内容
6、分布式爬虫
- 单机爬虫的问题:
- 单机效率
- IO吞吐量
- 多爬虫问题:
- 数据共享
- 分布式
- 需要做:
- 共享队列
- 去重
- Redis数据库
- 内存数据库
- 同时可以落地保存到硬盘
- 可以去重
- 可以把它理解成一个dict,set,list的集合体
- 可以对保存的数据进行生命周期的设置
- 内容保存数据库
- MongoDB
- MySQL等
- 安装scrapy_redis
- pip install scrapy_redis
- 官方文档:<scrapy-redis.readthedocs.org>