Python网络爬虫--Scrapy基础
Scrapy基础
1、Spider
- 用途
- 定义爬取网站的动作
- 分析爬取下来的内容
- 基础属性
- name:爬虫名称。定义Spider名字的字符串,必须是唯一的
- allowed_domains:允许爬取的域名,不在此范围的链接不会跟进爬取。可选配置
- start_urls:起始Url列表。在没有实现start_requests()方法时,默认从这个列表中爬取
- custom_settings:全局字典。此设置会覆盖项目全局的设置
- crawler:由from_crawler()方法设置,代表本Spider类对应的Crawler对象。Crawler对象包含了很多项目组件,可以获取项目的一些配置信息
- settings:Settings对象。可以直接获取项目的全局设置变量
- 常用方法
- start_requests():用于生成初始请求,必须返回一个可迭代对象。GET请求方式则返回Request(),POST请求方式则返回FormRequest()
- parse():默认的回调函数。负责处理Respone,处理返回结果,并提取想要的数据和下一步请求。该方法需要返回一个包含Request或Item的可迭代对象
- closed():当Spider关闭时,用于释放资源或荣盛石化了收尾操作
2、Downloader Middleware
-
用途
- 在Scheduler调度出队列的Request发送给Downloader下载之前,即Request执行下载之前,对其进行修改
- 在下载后生成的Response发送给Spider之前,即Spider解析Response之间,对其进行修改
-
设置
- 禁用DOWNLOADER_MIDDLEWARES_BASE中的Downloader Middleware
- 添加字典DOWNLOADER_MIDDLEWARES,并在其中添加自己定义的Downloader Middleware
-
核心方法
-
process_request(request, spider)
参数
- request:Request对象,即被处理的Request
- spider:Spider对象,即此Request对应的Spider
返回类型
-
返回None
Scrapy将继续处理该Request,接着执行其他Downloader Middleware的process_request()方法,直到Downloader把Request执行后得到Response才结束
-
返回Response对象
执行每个Downloader Middleware的process_response()方法,并将Response对象发送给Spider处理
-
返回Requests对象
重新将Request对象放入调度队列中,等待被调度
-
抛出IgnoreRequest异常
所有的Downloader Middleware的process_exception()方法
-
process_response(request, response, spider)
参数
- request:Request对象,即Response对应的Request
- response:Response对象,即此被处理的Response
- spider:Spider对象,即此Response对应的Spider
返回类型
-
返回Request对象
重新将Request对象放入调度队列中,等待被调度
-
返回Response对象
更低优先级的Downloader Middleware的process_response()方法会继续调用,继续对该Response对象进行处理
-
抛出异常
Request的errorback()方法会回调
-
process_exception(request, exception, spider)
参数
- request:Request对象,即Response对应的Request
- exception:抛出的异常
- spider:Spider对象,即此Response对应的Spider
返回类型
-
None
便低优先级的Downloader Middleware的process_exception()会被继续顺次调用,直到所有方法全部调用完毕
-
Response
每个Downloader Middleware的process_response()方法被依次调用
-
Request
重新将Request对象放入调度队列中,等待被调度
-
3、Spider Middleware(不太常用)
-
用途
- 在Response发送给Spider之前,对Response进行处理
- 在Request发送给Scheduler之前,对Request进行处理
- Spider生成的Item发送给Item Pipeline之前,对Item进行处理
-
核心方法
-
process_spider_input(response, spider)
当Response被Spider Middleware处理进,调用此方法
-
process_spider_output(response, result, spider)
当Spider处理Response返回结果时,调用此方法
-
process_spider_exception(response, exception, spider)
当Spider或Spider Middleware的process_spider_input()方法抛出异常时,调用些方法
-
process_start_request(start_requests, spider)
此方法以Spider启动的Request为参数被调用,执行过程类似于process_spider_output()方法,必须返回Request
-
4、Item Pipeline
-
用途
- 清理HTML数据
- 验证爬取数据,检查爬取字段
- 查重并丢弃重复内容
- 将爬取结果保存到数据库
-
核心方法
-
process_item(item, spider)[必须实现]
参数
- item
- spider
返回参数
-
Item对象
此Item会被低优先级的Item Pipeline的process_item()方法处理,直到所有方法调用完毕
-
DropItem异常
此Item被丢弃,不再进行处理
-
open_spider(spider)
在Spider开启时自动调用。可以进行初始化操作,比如数据库连接等
-
close_spider(spider)
在Spider关闭时自动调用。可以进行收尾工作,比如关闭数据库连接等
-
from_crawler(cls, crawler)
此方法是一个类方法,使用@classmethod标识,是一种依赖注入方式。
参数
- cls:就是Class,最后返回一个Class实例
- crawler:通过crawler可以拿到Scrapy的所有核心组件,例如全局配置
-
-
Image Pipeline
Scrapy提供了专门处理下载的Pipeline,包括文件下载和图片下载。
头文件
from scrapy.pipelines.images import ImagesPipeline
方法
-
get_media_requests()
将url字段取出来,生成Request对象,加入到调度队列,执行下载
-
file_path()
返回保存的文件名
-
item_completed()
此方法是当个Item完成下载时的处理方法。由于会下载失败,所以需要分析下载结果并剔除下载失败的图片
配置
ITEM_PIPELINES = { "项目名.pipelines.下载类名": 300, "项目名.pipelines.保存类名": 301 }
-
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgfibee
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01