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逐行读取文件内容的三种方法
Jan 20 Python
python对json的相关操作实例详解
Jan 04 Python
python随机数分布random测试
Aug 27 Python
Python面向对象程序设计构造函数和析构函数用法分析
Apr 12 Python
python使用PIL和matplotlib获取图片像素点并合并解析
Sep 10 Python
Python3 Tkinkter + SQLite实现登录和注册界面
Nov 19 Python
PyInstaller的安装和使用的详细步骤
Jun 02 Python
PyCharm 2020.2 安装详细教程
Sep 25 Python
python对批量WAV音频进行等长分割的方法实现
Sep 25 Python
如何利用Python给自己的头像加一个小国旗(小月饼)
Oct 02 Python
python通用数据库操作工具 pydbclib的使用简介
Dec 21 Python
Pyside2中嵌入Matplotlib的绘图的实现
Feb 22 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
德生S2000收音机更换“钕铁硼”全频扬声器
2021/03/02 无线电
中东人咖啡哲学
2021/03/03 咖啡文化
PHP对字符串的递增运算分析
2010/08/08 PHP
php读取mssql的ntext字段返回值为空的解决方法
2014/12/30 PHP
PHP递归调用数组值并用其执行指定函数的方法
2015/04/01 PHP
PHP使用SOAP扩展实现WebService的方法
2016/04/01 PHP
DOM相关内容速查手册
2007/02/07 Javascript
js 实现css风格选择器(压缩后2KB)
2012/01/12 Javascript
jQuery实现html表格动态添加新行的方法
2015/05/28 Javascript
tuzhu_req.js 实现仿百度图片首页效果
2015/08/11 Javascript
jQuery Select下拉框操作小结(推荐)
2016/07/22 Javascript
KnockoutJS 3.X API 第四章之数据控制流component绑定
2016/10/10 Javascript
如何实现星星评价(jquery.raty.js插件)
2016/12/21 Javascript
AngularJS 最常用的八种功能(基础知识)
2017/06/26 Javascript
浅谈通过JS拦截 pushState和replaceState事件
2017/07/21 Javascript
详解基于Vue2.0实现的移动端弹窗(Alert, Confirm, Toast)组件
2018/08/02 Javascript
浅析vue插槽和作用域插槽的理解
2019/04/22 Javascript
解决vue里a标签值解析变量,跳转页面,前面加默认域名端口的问题
2020/07/22 Javascript
IDEA配置jQuery, $符号不再显示黄色波浪线的问题
2020/10/09 jQuery
vue-quill-editor插入图片路径太长问题解决方法
2021/01/08 Vue.js
Python中的并发编程实例
2014/07/07 Python
举例区分Python中的浅复制与深复制
2015/07/02 Python
python编写弹球游戏的实现代码
2018/03/12 Python
Python将一个Excel拆分为多个Excel
2018/11/07 Python
python内存动态分配过程详解
2019/07/15 Python
Django使用Channels实现WebSocket的方法
2019/07/28 Python
python selenium循环登陆网站的实现
2019/11/04 Python
python numpy数组复制使用实例解析
2020/01/10 Python
大女孩胸罩:Big Girls Bras
2016/12/15 全球购物
中国电视购物:快乐购
2017/02/04 全球购物
香港现代设计家具品牌:Ziinlife Furniture
2018/11/13 全球购物
建筑文秘专业个人求职信范文
2013/12/28 职场文书
大学同学会活动方案
2014/08/20 职场文书
学校体育节班级口号
2015/12/25 职场文书
大学军训心得体会800字
2016/01/11 职场文书
python小型的音频操作库mp3Play
2022/04/24 Python