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实现爬虫统计学校BBS男女比例(一)
Dec 31 Python
Python实现遍历目录的方法【测试可用】
Mar 22 Python
python 处理dataframe中的时间字段方法
Apr 10 Python
PyQt5内嵌浏览器注入JavaScript脚本实现自动化操作的代码实例
Feb 13 Python
详解Python连接MySQL数据库的多种方式
Apr 16 Python
python+opencv实现摄像头调用的方法
Jun 22 Python
Python从文件中读取指定的行以及在文件指定位置写入
Sep 06 Python
TensorFlow 多元函数的极值实例
Feb 10 Python
python删除指定列或多列单个或多个内容实例
Jun 28 Python
Linux安装Python3如何和系统自带的Python2并存
Jul 23 Python
python super()函数的基本使用
Sep 10 Python
DRF使用simple JWT身份验证的实现
Jan 14 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中cookie和session的区别实例分析
2014/08/28 PHP
PHP PDOStatement::fetchObject讲解
2019/02/01 PHP
PHP 实现 WebSocket 协议原理与应用详解
2020/04/22 PHP
PHP程序员简单的开展服务治理架构操作详解(三)
2020/05/14 PHP
Laravel 自动转换长整型雪花 ID 为字符串的实现
2020/10/27 PHP
JavaScript中继承的一些示例方法与属性参考
2010/08/07 Javascript
js日历功能对象
2012/01/12 Javascript
javascript动画浅析
2012/08/30 Javascript
解决jquery异步按一定的时间间隔刷新问题
2012/12/10 Javascript
javascript合并表格单元格实例代码
2016/01/03 Javascript
jQuery flip插件实现的翻牌效果示例【附demo源码下载】
2016/09/20 Javascript
Web前端框架bootstrap实战【第一次接触使用】
2016/12/28 Javascript
JavaScript编码小技巧分享
2020/09/17 Javascript
[36:52]DOTA2真视界:基辅特锦赛总决赛
2017/05/21 DOTA
从零学Python之入门(四)运算
2014/05/27 Python
对Pandas DataFrame缺失值的查找与填充示例讲解
2018/11/06 Python
Python3模拟curl发送post请求操作示例
2019/05/03 Python
python openpyxl使用方法详解
2019/07/18 Python
python3的url编码和解码,自定义gbk、utf-8的例子
2019/08/22 Python
Python关键字及可变参数*args,**kw原理解析
2020/04/04 Python
html5 worker 实例(二) 图片变换效果
2013/06/24 HTML / CSS
HTML5资源预加载(Link prefetch)详细介绍(给你的网页加速)
2014/05/07 HTML / CSS
歌唱比赛策划方案
2014/06/06 职场文书
小学兴趣小组活动总结
2014/07/07 职场文书
分公司总经理岗位职责
2014/08/03 职场文书
工作批评与自我批评范文
2014/10/16 职场文书
政风行风评议心得体会
2014/10/21 职场文书
销售助理岗位职责
2015/02/11 职场文书
迎新晚会主持词开场白
2015/05/28 职场文书
大学开学典礼新闻稿
2015/07/17 职场文书
数学备课组工作总结
2015/08/12 职场文书
2016猴年春节慰问信
2015/11/30 职场文书
浅谈Nginx 中的两种限流方式
2021/03/31 Servers
灵能百分百第三季什么时候来?
2022/03/15 日漫
python_tkinter弹出对话框创建
2022/03/20 Python
使用Docker容器部署rocketmq单机的全过程
2022/04/03 Servers