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编写vim插件的简单示例
Apr 17 Python
python实现对一个完整url进行分割的方法
Apr 29 Python
python基础知识小结之集合
Nov 25 Python
Python的“二维”字典 (two-dimension dictionary)定义与实现方法
Apr 27 Python
Python实现上下班抢个顺风单脚本
Feb 07 Python
用python实现刷点击率的示例代码
Feb 21 Python
Django中在xadmin中集成DjangoUeditor过程详解
Jul 24 Python
详解python路径拼接os.path.join()函数的用法
Oct 09 Python
Python发送手机动态验证码代码实例
Feb 28 Python
Python使用pyenv实现多环境管理
Feb 05 Python
opencv用VS2013调试时用Image Watch插件查看图片
Jul 26 Python
Python安装使用Scrapy框架
Apr 12 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
浅析SVN常见问题及解决方法
2013/06/21 PHP
php堆排序实现原理与应用方法
2015/01/03 PHP
ThinkPHP中使用Ueditor富文本编辑器
2015/09/02 PHP
用javascript动态调整iframe高度的方法
2007/03/06 Javascript
javascript dom代码应用 简单的相册[firefox only]
2010/06/12 Javascript
javascript学习笔记(三)显示当时时间的代码
2011/04/08 Javascript
Jquery实现简单的动画效果代码
2012/03/18 Javascript
利用谷歌地图API获取点与点的距离的js代码
2012/10/11 Javascript
JavaScript获取网页表单action属性的方法
2015/04/02 Javascript
基于Jquery实现万圣节快乐特效
2015/11/01 Javascript
javascript实现保留两位小数的多种方法
2015/12/18 Javascript
使用jquery获取url以及jquery获取url参数的实现方法
2016/05/25 Javascript
javascript 动态脚本添加的简单方法
2016/10/11 Javascript
浅谈bootstrap使用中的一些问题以及解决过程
2016/10/18 Javascript
Javascript中JSON数据分组优化实践及JS操作JSON总结
2017/12/22 Javascript
JS计算两个时间相差分钟数的方法示例
2018/01/10 Javascript
vue.js获得当前元素的文字信息方法
2018/03/09 Javascript
vue项目环境变量配置的实现方法
2018/10/12 Javascript
js利用iframe实现选项卡效果
2020/08/09 Javascript
跟老齐学Python之大话题小函数(1)
2014/10/10 Python
git使用.gitignore设置不生效或不起作用问题的解决方法
2017/06/01 Python
Python 实现网页自动截图的示例讲解
2018/05/17 Python
Python3中_(下划线)和__(双下划线)的用途和区别
2019/04/26 Python
基于MATLAB和Python实现MFCC特征参数提取
2019/08/13 Python
python3.7 openpyxl 删除指定一列或者一行的代码
2019/10/08 Python
HTML5视频支持检测(检查浏览器是否支持视频播放)
2013/06/08 HTML / CSS
THE OUTNET英国官网:国际设计师品牌折扣网站
2016/08/14 全球购物
Haggar官网:美国男装品牌
2020/02/16 全球购物
应届生高等护理求职信
2013/10/12 职场文书
迟到检讨书5000字
2014/01/31 职场文书
小学语文教学反思
2014/02/10 职场文书
2014年医生工作总结
2014/11/21 职场文书
2015年教师节慰问信
2015/03/23 职场文书
刑事上诉状(量刑过重)
2015/05/23 职场文书
python简单验证码识别的实现过程
2021/06/20 Python
Redis 哨兵机制及配置实现
2022/03/25 Redis