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+mysql实现简单的web程序
Sep 11 Python
Python实现读取TXT文件数据并存进内置数据库SQLite3的方法
Aug 08 Python
Python/ArcPy遍历指定目录中的MDB文件方法
Oct 27 Python
python实现批量视频分帧、保存视频帧
May 31 Python
python五子棋游戏的设计与实现
Jun 18 Python
基于python实现把图片转换成素描
Nov 13 Python
解决tensorflow打印tensor有省略号的问题
Feb 04 Python
python数据预处理 :数据抽样解析
Feb 24 Python
简述python Scrapy框架
Aug 17 Python
Python根据字典的值查询出对应的键的方法
Sep 30 Python
python实现启动一个外部程序,并且不阻塞当前进程
Dec 05 Python
Python使用openpyxl模块处理Excel文件
Jun 05 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中$_REQUEST、$_POST、$_GET的区别和联系小结
2011/11/23 PHP
网页的分页下标生成代码(PHP后端方法)
2016/02/03 PHP
PHP使用Redis实现Session共享的实现示例
2019/05/12 PHP
JS中如何判断传过来的JSON数据中是否存在某字段
2014/08/18 Javascript
5个JavaScript经典面试题
2014/10/13 Javascript
JavaScript中的变量定义与储存介绍
2014/12/31 Javascript
基于jQuery实现网页进度显示插件
2015/03/04 Javascript
JS获取iframe中longdesc属性的方法
2015/04/01 Javascript
JS动态修改iframe高度和宽度的方法
2015/04/01 Javascript
JS获取一个未知DIV高度的方法
2016/08/09 Javascript
原生js编写焦点图效果
2016/12/08 Javascript
javascript实现秒表计时器的制作方法
2017/02/16 Javascript
js实现延迟加载的几种方法
2017/04/24 Javascript
Vue Element使用icon图标教程详解(第三方)
2018/02/07 Javascript
Vue SSR 组件加载问题
2018/05/02 Javascript
IE11下CKEditor在Bootstrap Modal中下拉问题的解决
2019/09/25 Javascript
Node.js API详解之 util模块用法实例分析
2020/05/09 Javascript
vue+canvas实现移动端手写签名
2020/05/21 Javascript
浅谈JavaScript 声明提升
2020/09/14 Javascript
Python基于回溯法解决01背包问题实例
2017/12/06 Python
十分钟利用Python制作属于你自己的个性logo
2018/05/07 Python
TensorFlow实现iris数据集线性回归
2018/09/07 Python
使用python绘制二元函数图像的实例
2019/02/12 Python
利用PyCharm Profile分析异步爬虫效率详解
2019/05/08 Python
Bootstrap File Input文件上传组件
2020/12/01 HTML / CSS
Melissa香港官网:MDreams
2016/07/01 全球购物
体育专业个人的求职信范文
2013/09/21 职场文书
师范教师大学生职业生涯规划范文
2014/01/05 职场文书
技校个人求职信范文
2014/01/25 职场文书
企业消防安全制度
2014/02/02 职场文书
行政办公室岗位职责
2014/03/18 职场文书
工厂标语大全
2014/10/06 职场文书
优秀共产党员事迹材料
2014/12/18 职场文书
党员承诺书格式范文
2015/04/28 职场文书
监护人证明
2015/06/19 职场文书
go语言使用Casbin实现角色的权限控制
2021/06/26 Golang