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合并文本文件示例
Feb 07 Python
pygame学习笔记(3):运动速率、时间、事件、文字
Apr 15 Python
python使用PyGame绘制图像并保存为图片文件的方法
Apr 24 Python
Python中time模块与datetime模块在使用中的不同之处
Nov 24 Python
Python简单实现Base64编码和解码的方法
Apr 29 Python
linux安装Python3.4.2的操作方法
Sep 28 Python
Python学习笔记之列表和成员运算符及列表相关方法详解
Aug 22 Python
Python 导入文件过程图解
Oct 15 Python
从numpy数组中取出满足条件的元素示例
Nov 26 Python
使用 tf.nn.dynamic_rnn 展开时间维度方式
Jan 21 Python
详解python中GPU版本的opencv常用方法介绍
Jul 24 Python
jupyter notebook 写代码自动补全的实现
Nov 02 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使用websocket示例详解
2014/03/12 PHP
php 使用redis锁限制并发访问类示例
2016/11/02 PHP
详解PHP版本兼容之openssl调用参数
2018/07/25 PHP
javascript代码编写需要注意的7个小细节小结
2011/09/21 Javascript
JS实现下拉框的动态添加(附效果)
2013/04/03 Javascript
js实现在页面上弹出蒙板技巧简单实用
2013/04/16 Javascript
js和jquery使按钮失效为不可用状态的方法
2014/01/26 Javascript
Js与Jq获取浏览器和对象值的方法
2016/03/18 Javascript
jquery实现全选、不选、反选的两种方法
2016/09/06 Javascript
javascript中setAttribute兼容性用法分析
2016/12/12 Javascript
vue的基本用法与常见指令
2017/08/15 Javascript
node通过express搭建自己的服务器
2017/09/30 Javascript
angular写一个列表的选择全选交互组件的示例
2018/01/22 Javascript
vue实现树形结构样式和功能的实例代码
2019/10/15 Javascript
JS实现简易留言板增删功能
2020/02/08 Javascript
vue+element获取el-table某行的下标,根据下标操作数组对象方式
2020/08/07 Javascript
浅谈Python中chr、unichr、ord字符函数之间的对比
2016/06/16 Python
Python实现ssh批量登录并执行命令
2016/10/25 Python
Python字符串对象实现原理详解
2019/07/01 Python
django做form表单的数据验证过程详解
2019/07/26 Python
python识别验证码图片实例详解
2020/02/17 Python
PyTorch实现重写/改写Dataset并载入Dataloader
2020/07/14 Python
Python 操作SQLite数据库的示例
2020/10/16 Python
Skyscanner台湾:全球知名的旅行比价引擎
2018/07/01 全球购物
荷兰鞋类购物网站:Donelli
2019/05/24 全球购物
英国现代、当代和设计师家具店:Furntastic
2020/07/18 全球购物
医学护理系毕业生求职信
2013/10/01 职场文书
《鸟岛》教学反思
2014/04/26 职场文书
我们的节日清明节活动总结
2014/04/30 职场文书
抵押贷款承诺书
2014/05/30 职场文书
作风大整顿心得体会
2014/09/10 职场文书
会议主持词开场白
2015/05/28 职场文书
信息技术远程培训心得体会
2016/01/09 职场文书
教你用python实现12306余票查询
2021/06/30 Python
python3实现常见的排序算法(示例代码)
2021/07/04 Python
《英雄联盟》2022日蚀、月蚀皮肤演示 黑潮亚索曝光
2022/04/13 其他游戏