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中的正则表达式的用法
Apr 09 Python
python采集百度百科的方法
Jun 05 Python
教你用Type Hint提高Python程序开发效率
Aug 08 Python
Jupyter notebook远程访问服务器的方法
May 24 Python
Python基于sklearn库的分类算法简单应用示例
Jul 09 Python
Python Tkinter模块实现时钟功能应用示例
Jul 23 Python
利用Python进行图像的加法,图像混合(附代码)
Jul 14 Python
Python如何优雅获取本机IP方法
Nov 10 Python
Python函数的返回值、匿名函数lambda、filter函数、map函数、reduce函数用法实例分析
Dec 26 Python
appium+python自动化配置(adk、jdk、node.js)
Nov 17 Python
python 解决函数返回return的问题
Dec 05 Python
python中doctest库实例用法
Dec 31 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
ajax php 实现写入数据库
2009/09/02 PHP
php求一个网段开始与结束IP地址的方法
2015/07/09 PHP
php封装好的人民币数值转中文大写类
2015/12/20 PHP
Ajax PHP JavaScript MySQL实现简易无刷新在线聊天室
2016/08/17 PHP
PHP配置ZendOpcache插件加速
2019/02/14 PHP
php测试kafka项目示例
2020/02/06 PHP
JavaScript DOM学习第八章 表单错误提示
2010/02/19 Javascript
javascript innerHTML使用分析
2010/12/03 Javascript
解读Bootstrap v4 sass设计
2016/05/29 Javascript
jQuery实现图片轮播效果代码
2016/09/27 Javascript
页面点击小红心js实现代码
2018/05/26 Javascript
JS实现li标签的删除
2019/04/12 Javascript
前端深入理解Typescript泛型概念
2020/03/09 Javascript
Python学习笔记之常用函数及说明
2014/05/23 Python
Python数据结构之栈、队列及二叉树定义与用法浅析
2018/12/27 Python
Python中时间datetime的处理与转换用法总结
2019/02/18 Python
Python3 pickle对象串行化代码实例解析
2020/03/23 Python
python3.6环境下安装freetype库和基本使用方法(推荐)
2020/05/10 Python
keras导入weights方式
2020/06/12 Python
pandas之分组groupby()的使用整理与总结
2020/06/18 Python
Django Form设置文本框为readonly操作
2020/07/03 Python
深入理解css中vertical-align属性
2017/04/18 HTML / CSS
使用canvas绘制超炫时钟
2014/12/17 HTML / CSS
详解HTML5 Canvas绘制时指定颜色与透明度的方法
2016/03/25 HTML / CSS
Stylenanda中文站:韩国一线网络服装品牌
2016/12/22 全球购物
Mansur Gavriel官网:纽约市的一个设计品牌
2019/05/02 全球购物
Mountain Hardwear官网:攀岩服装和户外装备
2019/09/26 全球购物
程序集与命名空间有什么不同
2014/07/25 面试题
通信工程毕业生自荐信
2013/11/01 职场文书
教育课题研究自我鉴定范文
2013/12/28 职场文书
大一军训感言
2014/01/09 职场文书
总经理岗位职责描述
2014/02/08 职场文书
党的群众路线学习材料
2014/05/16 职场文书
班级学习雷锋活动总结
2014/07/04 职场文书
党员评议个人总结
2014/10/20 职场文书
劳保用品管理制度范本
2015/08/06 职场文书