scrapy头部修改的方法详解
作者:周少钦 发布时间:2023-09-13 05:58:10
被Scrapy自动添加的头部
在没有任何配置的情况下,scrapy会对请求默认加上一些头部信息
Scrapy会通过配置文件中的USER_AGENT配置,自动为头部添加User-Agent,这条配置会被任何包含User-Agent的配置覆盖
当请求经过下载器后,会被自动添加头部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的理解,如有错误欢迎指正
来源:https://blog.csdn.net/mrkkmrkkk/article/details/110534234


猜你喜欢
- 杨辉三角,是二项式系数在三角形中的一种几何排列每个数等于它上方两数之和。每行数字左右对称,由1开始逐渐变大。第n行的数字有n项。第n行数字和
- 描述cmp() 方法用于比较两个列表的元素。语法cmp()方法语法:cmp(list1, list2)参数list1 -- 比较的列表。li
- 一、待搜索图二、测试集三、new_similarity_compare.py# -*- encoding=utf-8 -*-from ima
- 最近做IM的时候遇到一个问题,同时用到了这三个关键字。就是查询一个人的离线消息详情,我们服务端返回给客户端显示的这个详情包括了三个内容,第一
- 1.mysql中or语法的使用,在mysql语法中or使用注意点。 项目遇到坑,遍历发放奖励数据查询错误!!!$sql = 'SEL
- 阅读上一篇:javascript面向对象编程(三)继承是面向对象语言中的一个重要概念,现在我们来探讨一下继承。在网上搜一下javascrip
- import time,datetime import urllib2 def
- 解决golang编译提示dial tcp 172.217.160.113:443: connectex: A connection atte
- 前段时间看到letcode上的元音字母字符串反转的题目,今天来研究一下字符串反转的内容。主要有三种方法:1.切片法(最简洁的一种)#切片法d
- 1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2、I/O吞吐量小,形成了瓶颈效应。 3、没有 创建计算列导致查询
- 想必大家都很喜欢用Word打字,用Excel进行计算和规划,用PowerPoint作幻灯片进行展示…,但是这只用到了Office系列产品的很
- 本文实例讲述了PHP连接MySQL数据库的三种方式。分享给大家供大家参考,具体如下:PHP与MySQL的连接有三种API接口,分别是:PHP
- 在开发高并发系统时,有三把利器用来保护系统:缓存、降级和限流。那么何为限流呢?顾名思义,限流就是限制流量,就像你宽带包了1个G的流量,用完了
- 一、安装相关的模块首先第一步的话我们需要安装相关的模块,通过pip命令来安装pip install gif另外由于gif模块之后会被当做是装
- 目录一、Python 3.8 安装1.通过 Apt 安装Python3.82.配置 python3.8 为系统默认 python3二、卸载p
- 经常在各处牛人的代码中看到许多简写的条件表达语句,看了一些介绍这方面的文章,觉得3 ways 2 say if这篇文章(http://www
- 本文实例讲述了php简单定时执行任务的实现方法。分享给大家供大家参考。具体实现方法如下:<?phpignore_user_abort(
- 如果你有过Web编程的经验,那么或多或少都听说过或者使用过模板。简而言之,模板是可用于创建动态内容的文本文件。例如,你有一个网站导航栏的模板
- 大家好,我是东哥。本篇和大家介绍一个经典的异常检测算法:局部离群因子(Local Outlier Factor),简称LOF算法。背景Loc
- 打印类的所有属性和方法利用dir(obj)方法获得obj对象的所有属性和方法名,返回一个list。for item in dir(top_k