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命令启动Web服务器实例详解
Feb 23 Python
解决Shell执行python文件,传参空格引起的问题
Oct 30 Python
把pandas转换int型为str型的方法
Jan 29 Python
机器学习实战之knn算法pandas
Jun 22 Python
python使用 __init__初始化操作简单示例
Sep 26 Python
Python上下文管理器类和上下文管理器装饰器contextmanager用法实例分析
Nov 07 Python
python飞机大战 pygame游戏创建快速入门详解
Dec 17 Python
python 实现仿微信聊天时间格式化显示的代码
Apr 17 Python
Python基于pandas爬取网页表格数据
May 11 Python
python 操作mysql数据中fetchone()和fetchall()方式
May 15 Python
记录一下scrapy中settings的一些配置小结
Sep 28 Python
一篇文章弄懂Python关键字、标识符和变量
Jul 15 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实现的博客欢迎提示功能(很特别哦)
2014/06/05 PHP
PHP把数字转成人民币大写的函数分享
2014/06/30 PHP
php实现无限级分类(递归方法)
2015/08/06 PHP
使用ltrace工具跟踪PHP库函数调用的方法
2016/04/25 PHP
JS版元素周期表实现方法
2015/08/05 Javascript
使用AngularJS 跨站请求如何解决jsonp请求问题
2017/01/16 Javascript
jQuery实现简易的输入框字数计数功能示例
2017/01/16 Javascript
原生javascript移动端滑动banner效果
2017/03/10 Javascript
jQuery实现简单的滑动导航代码(移动端)
2017/05/22 jQuery
jQuery实现的页面弹幕效果【测试可用】
2018/08/17 jQuery
原生JS实现的简单轮播图功能【适合新手】
2018/08/17 Javascript
JavaScript简单实现动态改变HTML内容的方法示例
2018/12/25 Javascript
JS计算两个数组的交集、差集、并集、补集(多种实现方式)
2019/05/21 Javascript
js 图片懒加载的实现
2020/10/21 Javascript
Python类的定义、继承及类对象使用方法简明教程
2015/05/08 Python
分享Python文本生成二维码实例
2016/01/06 Python
Python实现Pig Latin小游戏实例代码
2018/02/02 Python
matplotlib subplots 设置总图的标题方法
2018/05/25 Python
mac下如何将python2.7改为python3
2018/07/13 Python
Python中new方法的详解
2019/01/15 Python
Jupyter notebook 远程配置及SSL加密教程
2020/04/14 Python
MIXIT官网:俄罗斯最大的化妆品公司之一
2020/01/25 全球购物
JDK安装目录下有哪些内容
2014/08/25 面试题
财务与信息服务专业推荐信
2013/11/28 职场文书
金融专业大学生职业生涯规划范文
2014/01/16 职场文书
石油工程专业毕业生求职信
2014/04/13 职场文书
生物科学专业毕业生求职信
2014/06/02 职场文书
党委干部批评与自我批评发言稿
2014/09/28 职场文书
初中生思想道德自我评价
2015/03/09 职场文书
团组织推荐意见
2015/06/05 职场文书
北京爱情故事观后感
2015/06/12 职场文书
《穷人》教学反思
2016/02/19 职场文书
公司晚会主持词
2019/04/17 职场文书
SpringBoot 拦截器妙用你真的了解吗
2021/07/01 Java/Android
Elasticsearch 配置详解
2022/04/19 Java/Android
html中两种获取标签内的值的方法
2022/06/10 HTML / CSS