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中的异常处理学习笔记
Jan 28 Python
Django中的“惰性翻译”方法的相关使用
Jul 27 Python
理解python正则表达式
Jan 15 Python
Python 文件操作的详解及实例
Sep 18 Python
基于Python中求和函数sum的用法详解
Jun 28 Python
Python内置方法实现字符串的秘钥加解密(推荐)
Dec 09 Python
python实现超级马里奥
Mar 18 Python
PIL.Image.open和cv2.imread的比较与相互转换的方法
Jun 03 Python
如何用python免费看美剧
Aug 11 Python
如何在Anaconda中打开python自带idle
Sep 21 Python
总结Python连接CS2000的详细步骤
Jun 23 Python
Python Flask搭建yolov3目标检测系统详解流程
Nov 07 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
PHP远程连接MYSQL数据库非常慢的解决方法
2008/07/05 PHP
javascript 装载iframe子页面,自适应高度
2009/03/20 Javascript
jquery选择符快速提取web表单数据示例
2014/03/27 Javascript
在JavaScript中用getMinutes()方法返回指定的分时刻
2015/06/10 Javascript
Nodejs如何复制文件
2016/03/09 NodeJs
jQuery绑定事件的几种实现方式
2016/05/09 Javascript
Node.js+Express配置入门教程
2016/05/19 Javascript
仅一个form表单 js实现注册信息依次填写提交功能
2016/06/12 Javascript
angularjs2中父子组件的数据传递的实例代码
2017/07/05 Javascript
jQuery扇形定时器插件pietimer使用方法详解
2017/07/18 jQuery
vue中使用refs定位dom出现undefined的解决方法
2017/12/21 Javascript
jquery无缝图片轮播组件封装
2020/11/25 jQuery
jQuery-Citys省市区三级菜单联动插件使用详解
2019/07/26 jQuery
ES6 Iterator接口和for...of循环用法分析
2019/07/31 Javascript
layui use 定义js外部引用函数的方法
2019/09/26 Javascript
[44:39]2014 DOTA2国际邀请赛中国区预选赛 NE VS CNB
2014/05/21 DOTA
[05:34]2014DOTA2国际邀请赛中国区预选赛精彩TOPPLAY第二弹
2014/06/25 DOTA
python实现的用于搜索文件并进行内容替换的类实例
2015/06/28 Python
教大家使用Python SqlAlchemy
2016/02/12 Python
python 调用HBase的简单实例
2016/12/18 Python
Python科学计算包numpy用法实例详解
2018/02/08 Python
Tensorflow使用tfrecord输入数据格式
2018/06/19 Python
Python格式化输出字符串方法小结【%与format】
2018/10/29 Python
Python如何使用bokeh包和geojson数据绘制地图
2020/03/21 Python
使用jupyter notebook运行python和R的步骤
2020/08/13 Python
Python中logging日志的四个等级和使用
2020/11/17 Python
CSS3教程:background-clip和background-origin
2008/10/17 HTML / CSS
浅谈CSS3动画的回调处理
2016/07/21 HTML / CSS
SmartBuyGlasses荷兰:购买太阳镜和眼镜
2020/03/16 全球购物
临床医学大学生求职信
2013/09/28 职场文书
李敖北大演讲稿
2014/05/24 职场文书
道路运输企业安全生产责任书
2014/07/28 职场文书
违反交通安全法检讨书
2014/10/24 职场文书
聚众斗殴罪辩护词
2015/05/21 职场文书
Redis持久化与主从复制的实践
2021/04/27 Redis
Python带你从浅入深探究Tuple(基础篇)
2021/05/15 Python