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抓取Discuz!用户名脚本代码
Dec 30 Python
python实现文件路径和url相互转换的方法
Jul 06 Python
Python之父谈Python的未来形式
Jul 01 Python
python生成excel的实例代码
Nov 08 Python
Python使用 Beanstalkd 做异步任务处理的方法
Apr 24 Python
Python线程同步的实现代码
Oct 03 Python
pandas对dataFrame中某一个列的数据进行处理的方法
Jul 08 Python
pyqt5 QScrollArea设置在自定义侧(任何位置)
Sep 25 Python
Python实现检测文件的MD5值来查找重复文件案例
Mar 12 Python
Pycharm配置PyQt5环境的教程
Apr 02 Python
Python grequests模块使用场景及代码实例
Aug 10 Python
pytest fixtures装饰器的使用和如何控制用例的执行顺序
Jan 28 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
全国FM电台频率大全 - 24 贵州省
2020/03/11 无线电
分页显示Oracle数据库记录的类之一
2006/10/09 PHP
Mysql的常用命令
2006/10/09 PHP
php中获取关键词及所属来源搜索引擎名称的代码
2011/02/15 PHP
PHP实现更新中间关联表数据的两种方法
2014/09/01 PHP
php实现的发送带附件邮件类实例
2014/09/22 PHP
PHP实现将视频转成MP4并获取视频预览图的方法
2015/03/12 PHP
PHP生成唯一ID之SnowFlake算法
2016/12/17 PHP
漂亮的仿flash菜单,来自蓝色经典
2006/06/26 Javascript
倒记时60刷新网页的js代码
2014/02/18 Javascript
html的DOM中document对象forms集合用法实例
2015/01/21 Javascript
JavaScript将字符串转换成字符编码列表的方法
2015/03/19 Javascript
AngularJs学习第八篇 过滤器filter创建
2016/06/08 Javascript
js 将input框中的输入自动转化成半角大写(税号输入框)
2017/02/16 Javascript
微信小程序中顶部导航栏的实现代码
2017/03/30 Javascript
详解vue父子组件间传值(props)
2017/06/29 Javascript
使用JS组件实现带ToolTip验证框的实例代码
2017/08/23 Javascript
vue-cli配置文件——config篇
2018/01/04 Javascript
微信小程序模板(template)使用详解
2018/01/31 Javascript
vue瀑布流组件实现上拉加载更多
2020/03/10 Javascript
Python 变量类型及命名规则介绍
2013/06/08 Python
Django实战之用户认证(初始配置)
2018/07/16 Python
Python进程间通信Queue消息队列用法分析
2019/05/22 Python
windows环境中利用celery实现简单任务队列过程解析
2019/11/29 Python
python opencv根据颜色进行目标检测的方法示例
2020/01/15 Python
pytorch 修改预训练model实例
2020/01/18 Python
CSS3实现复选框动画特效示例代码
2016/09/27 HTML / CSS
奥地利时尚、美容、玩具和家居之家:Kastner & Öhler
2020/04/26 全球购物
优秀团员个人的自我评价
2013/10/02 职场文书
酒店总经理欢迎词
2014/01/15 职场文书
2014年房产销售工作总结
2014/12/08 职场文书
民主生活会汇报材料
2014/12/15 职场文书
公务员个人考察材料
2014/12/23 职场文书
2015年公司国庆放假通知
2015/07/30 职场文书
《丑小鸭》教学反思
2016/02/19 职场文书
win10电脑右下角输入法图标不见了?Win10右下角不显示输入法的解决方法
2022/07/23 数码科技