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构建XML树结构的方法示例
Jun 30 Python
简单谈谈Python中的json与pickle
Jul 19 Python
利用TensorFlow训练简单的二分类神经网络模型的方法
Mar 05 Python
Python实现计算圆周率π的值到任意位的方法示例
May 08 Python
mac下如何将python2.7改为python3
Jul 13 Python
使用urllib库的urlretrieve()方法下载网络文件到本地的方法
Dec 19 Python
python将一个英文语句以单词为单位逆序排放的方法
Dec 20 Python
python 获取utc时间转化为本地时间的方法
Dec 31 Python
Python实现二叉搜索树BST的方法示例
Jul 30 Python
Python实现语音识别和语音合成功能
Sep 20 Python
Django 权限管理(permissions)与用户组(group)详解
Nov 30 Python
Python实现PIL图像处理库绘制国际象棋棋盘
Jul 16 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微信公众平台开发类实例
2015/04/01 PHP
PHP Web木马扫描器代码分享
2015/09/06 PHP
两种php实现图片上传的方法
2016/01/22 PHP
php用户名的密码加密更安全的方法
2019/06/21 PHP
用Javascript数组处理多个字符串的连接问题
2009/08/20 Javascript
Javascript实现带关闭按钮的网页漂浮广告代码
2014/01/12 Javascript
JavaSript中变量的作用域闭包的深入理解
2014/05/12 Javascript
Jquery 实现图片轮换
2015/01/28 Javascript
flash+jQuery实现可关闭及重复播放的压顶广告
2015/04/15 Javascript
js删除局部变量的实现方法
2016/06/25 Javascript
vue.js学习笔记之绑定style样式和class列表
2016/10/31 Javascript
AngularJS入门教程之表单校验用法示例
2016/11/02 Javascript
js实现登录与注册界面
2017/11/01 Javascript
vue mounted 调用两次的完美解决办法
2018/10/29 Javascript
JavaScript数据结构之栈实例用法
2019/01/18 Javascript
基于vue-cli 路由 实现类似tab切换效果(vue 2.0)
2019/05/08 Javascript
Python3使用requests包抓取并保存网页源码的方法
2016/03/15 Python
python+matplotlib实现礼盒柱状图实例代码
2018/01/16 Python
pandas数值计算与排序方法
2018/04/12 Python
python如何爬取个性签名
2018/06/19 Python
阿里云ECS服务器部署django的方法
2019/08/29 Python
postman和python mock测试过程图解
2020/02/22 Python
Python开发之身份证验证库id_validator验证身份证号合法性及根据身份证号返回住址年龄等信息
2020/03/20 Python
Python虚拟环境virtualenv创建及使用过程图解
2020/12/08 Python
HTML5之SVG 2D入门4—笔画与填充
2013/01/30 HTML / CSS
html5 自定义播放器核心代码
2013/12/20 HTML / CSS
澳大利亚快时尚鞋类市场:Billini
2018/05/20 全球购物
土耳其玩具商店:Toyzz Shop
2019/08/02 全球购物
PyQt QMainWindow的使用示例
2021/03/24 Python
高中毕业生自我鉴定范文
2013/09/26 职场文书
安全生产先进个人材料
2014/02/06 职场文书
感恩小明星事迹材料
2014/05/23 职场文书
商标侵权律师函
2015/05/27 职场文书
黑暗中的舞者观后感
2015/06/18 职场文书
红歌会主持词
2015/07/02 职场文书
在CSS中使用when/else的方法
2022/01/18 HTML / CSS