scrapy头部修改的方法详解


Posted in Python onDecember 06, 2020

被Scrapy自动添加的头部

在没有任何配置的情况下,scrapy会对请求默认加上一些头部信息

Scrapy会通过配置文件中的USER_AGENT配置,自动为头部添加User-Agent,这条配置会被任何包含User-Agent的配置覆盖

scrapy头部修改的方法详解

当请求经过下载器后,会被自动添加头部Accept-Encoding: gzip,deflate, 会被任意包含Accept-Encoding的头部配置覆盖

配置settings.py文件中默认的头部

#DEFAULT_REQUEST_HEADERS = {
# 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
# 'Accept-Language': 'en'
#}

当这个配置属于注释状态时,头部被设置为Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8与
Accept-Language: en,可以通过取消注释修改或增删其中的内容

优先级

  • 会被Request和中间件中的头部配置覆盖
  • 可以覆盖scrapy自动添加的User-Agent和Accept-Encoding

可以在爬虫中通过custom_settings设置配置仅在当前爬虫生效

class XXXSpider(scrapy.Spider):
 ...
 custom_settings = {
  DEFAULT_REQUEST_HEADERS = {...}
	}
 ....

在Request中设置头部

当给引擎返回Request时,可以为他配置头部

...
def parse(self):
  headers = {
    ...
  }
  
  yield scrapy.Request(url, headers=headers)

优先级

  • Request中设置的header会和settings.py文件中的默认头部合并到一起,如果有重复的配置,那么会覆盖那条配置
  • 会被中间件中的配置覆盖

在中间件中配置

当Request请求通过下载中间件发往下载器时,可以通过下载中间件配置头部

class XXXDownloaderMiddleware
  def process_request(self, request, spider):
	  request.headers["key"] = value
    return None

还需要在配置文件中启用下载中间价

DOWNLOADER_MIDDLEWARES = {
  'project.middlewares.XXXDownloaderMiddleware': 543,
}

优先级

  • 会覆盖除了Referer以外的所有头部配置

referer中间件

当存在多次请求时,referer中间件会自动帮Request的头部中的referer加上上一次请求的url

优先级

  • 最高,会在所有头部配置完之后,添加referer
  • 除了只请求一次没有referer的情况,就算在其他头部配置中设置了referer也会被referer中间件覆盖

关闭referer中间件

在配置文件中添加REFERER_ENABLED=False即可关闭

优先级分析

Scrapy自动添加的User-Agent与Accept-Encoding < 配置文件中的默认配置DEFAULT_REQUEST_HEADERS < Request中修改的header < 中间件中添加的header < referer中间件添加的referer

此篇文章仅表示自己对scrapy的理解,如有错误欢迎指正

到此这篇关于scrapy头部修改的文章就介绍到这了,更多相关scrapy头部修改内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
讲解Python的Scrapy爬虫框架使用代理进行采集的方法
Feb 18 Python
Python处理JSON数据并生成条形图
Aug 05 Python
解决Python requests 报错方法集锦
Mar 19 Python
python使用opencv按一定间隔截取视频帧
Mar 06 Python
python多进程提取处理大量文本的关键词方法
Jun 05 Python
python中redis查看剩余过期时间及用正则通配符批量删除key的方法
Jul 30 Python
Django中URL的参数传递的实现
Aug 04 Python
Python使用Turtle库绘制一棵西兰花
Nov 23 Python
python输出数组中指定元素的所有索引示例
Dec 06 Python
Python3自动生成MySQL数据字典的markdown文本的实现
May 07 Python
解析Python 偏函数用法全方位实现
Jun 26 Python
Python绘画好看的星空图
Mar 17 Python
python os.rename实例用法详解
Dec 06 #Python
python 解决函数返回return的问题
Dec 05 #Python
在Python中实现字典反转案例
Dec 05 #Python
解决python3输入的坑——input()
Dec 05 #Python
python3 使用ssh隧道连接mysql的操作
Dec 05 #Python
python3通过subprocess模块调用脚本并和脚本交互的操作
Dec 05 #Python
python实现启动一个外部程序,并且不阻塞当前进程
Dec 05 #Python
You might like
一个没有MYSQL数据库支持的简易留言本的编写
2006/10/09 PHP
php中global和$GLOBALS[]的分析之一
2012/02/02 PHP
PHP按行读取文件时删除换行符的3种方法
2014/05/04 PHP
PHP的几个常用加密函数
2016/02/03 PHP
PHP时间戳格式全部汇总 (获取时间、时间戳)
2016/06/13 PHP
PHP判断用户是否已经登录(跳转到不同页面或者执行不同动作)
2016/09/22 PHP
PHP对象实例化单例方法
2017/01/19 PHP
ThinkPHP实现图片上传操作的方法详解
2017/05/08 PHP
PHP+redis实现的悲观锁机制示例
2018/06/12 PHP
解决laravel 出现ajax请求419(unknown status)的问题
2019/09/03 PHP
JS实现的自定义网页拖动类
2015/11/06 Javascript
AngularJS在IE8的不支持的解决方法
2016/05/13 Javascript
AngularJS基础 ng-mouseleave 指令详解
2016/08/02 Javascript
JavaScript与ActionScript3两者的同性与差异性
2016/09/22 Javascript
Dropify.js图片宽高自适应的方法
2017/11/27 Javascript
vue + element-ui实现简洁的导入导出功能
2017/12/22 Javascript
vue vantUI实现文件(图片、文档、视频、音频)上传(多文件)
2019/10/15 Javascript
微信小程序实现抖音播放效果的实例代码
2020/04/11 Javascript
基于Python和Scikit-Learn的机器学习探索
2017/10/16 Python
python保存网页图片到本地的方法
2018/07/24 Python
python去重,一个由dict组成的list的去重示例
2019/01/21 Python
python scatter散点图用循环分类法加图例
2019/03/19 Python
python mqtt 客户端的实现代码实例
2019/09/25 Python
python代码实现将列表中重复元素之间的内容全部滤除
2020/05/22 Python
Python过滤序列元素的方法
2020/07/31 Python
英国最受欢迎的手表网站:Watch Shop
2016/10/21 全球购物
人事专员岗位职责
2013/11/20 职场文书
设计总监岗位职责
2013/12/07 职场文书
工业学校毕业生自荐信范文
2014/01/03 职场文书
员工薪酬福利制度
2014/01/17 职场文书
小学安全教育月活动总结
2014/07/07 职场文书
考试作弊检讨书范文
2015/01/27 职场文书
煤矿百日安全活动总结
2015/05/07 职场文书
小王子读书笔记
2015/06/29 职场文书
创业计划书之养殖业
2019/10/11 职场文书
Ajax 的初步实现(使用vscode+node.js+express框架)
2021/06/18 Javascript