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实现端口复用实例代码
Jul 03 Python
全面了解python中的类,对象,方法,属性
Sep 11 Python
利用Python实现Windows定时关机功能
Mar 21 Python
Python中单例模式总结
Feb 20 Python
python多进程实现文件下载传输功能
Jul 28 Python
Django安装配置mysql的方法步骤
Oct 15 Python
Python中常用的8种字符串操作方法
May 06 Python
python zip()函数使用方法解析
Oct 31 Python
解决django-xadmin列表页filter关联对象搜索问题
Nov 15 Python
从pandas一个单元格的字符串中提取字符串方式
Dec 17 Python
Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作
Jun 06 Python
浅谈Python中对象是如何被调用的
Apr 06 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格式化工具Beautify PHP小小BUG
2008/04/24 PHP
深入for,while,foreach遍历时间比较的详解
2013/06/08 PHP
PHP编程中尝试程序并发的几种方式总结
2016/03/21 PHP
Centos PHP 扩展Xchche的安装教程
2016/07/09 PHP
PHP 枚举类型的管理与设计知识点总结
2020/02/13 PHP
JavaScript 拾碎[三] 使用className属性
2010/10/16 Javascript
JS实现图片高斯模糊切换效果的焦点图实例
2017/01/21 Javascript
jquery表单验证实例仿Toast提示效果
2017/03/03 Javascript
jquery实现折叠菜单效果【推荐】
2017/03/08 Javascript
详解关于vue2.0工程发布上线操作步骤
2018/09/27 Javascript
Layui动态生成select下拉选择框不显示的解决方法
2019/09/24 Javascript
JS数据类型STRING使用实例解析
2019/12/18 Javascript
js实现简单音乐播放器
2020/06/30 Javascript
Vue中component标签解决项目组件化操作
2020/09/04 Javascript
JS检测浏览器开发者工具是否打开的方法详解
2020/10/02 Javascript
JS模拟实现京东快递单号查询
2020/11/30 Javascript
Python3.6连接Oracle数据库的方法详解
2018/05/18 Python
Python调用C++,通过Pybind11制作Python接口
2018/10/16 Python
Python设计模式之状态模式原理与用法详解
2019/01/15 Python
Pycharm 实现下一个文件引用另外一个文件的方法
2019/01/17 Python
python调用接口的4种方式代码实例
2019/11/19 Python
Python中Subprocess的不同函数解析
2019/12/10 Python
使用Python和百度语音识别生成视频字幕的实现
2020/04/09 Python
pycharm无法安装第三方库的问题及解决方法以scrapy为例(图解)
2020/05/09 Python
使用python求斐波那契数列中第n个数的值示例代码
2020/07/26 Python
BeautifulSoup中find和find_all的使用详解
2020/12/07 Python
程序员机试试题汇总
2012/03/07 面试题
劳资员岗位职责
2013/11/11 职场文书
一夜的工作教学反思
2014/02/08 职场文书
ktv总经理岗位职责
2014/02/17 职场文书
安全责任协议书
2014/04/21 职场文书
王兆力在市委党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
医院见习报告范文
2014/11/03 职场文书
安全生产先进个人事迹材料
2014/12/30 职场文书
安全生产警示教育活动总结
2015/05/09 职场文书
AJAX引擎原理以及XmlHttpRequest对象的axios、fetch区别详解
2022/04/09 Javascript