如何设置 Scrapy 标头

如何设置 Scrapy 标头:分步指南

在这里,我将向你介绍有关 Scrapy 标头的所有知识。我们将介绍它们为何重要、如何更改它们,以及有效使用它们的一些简单技巧。最后,你会对处理标头充满信心,让你的刮擦项目顺利进行。让我们开始吧

Scrapy 标头为何重要?

HTTP 头信息是客户端(如浏览器或搜索器)和服务器在请求和响应期间交换的元数据。它们告诉服务器如何处理你的请求以及发送回什么。头信息在网络刮擦中至关重要。服务器通常会检查它们,以确定请求是来自真实用户还是机器人。

Scrapy 在发送请求时使用默认头信息,但这些头信息可能会造成问题,因为它们会显示请求来自自动化工具。许多网站都有反僵尸机制,可以标记或阻止此类请求。自定义标头可以让你

  • 模仿真实浏览器 如果您设置的标题与 Chrome 或 Firefox 等流行浏览器类似,那么您的刮擦器会显得更合法。
  • 处理会话管理: 利用 cookie 和其他会话相关标头,可以保持登录状态或绕过限制区域。
  • 减少积木: 反僵尸系统通常依靠分析标题来检测可疑活动。适当的定制可以降低被标记的几率。
  • 改进数据检索: 有些服务器会根据标头做出不同的响应,例如提供特定的内容格式或语言偏好。

HTTP 标头类型

HTTP 标头大致分为两类:

  1. 请求标头:这些信息由客户端发送到服务器,包括浏览器类型、语言偏好和引用信息等元数据。
  2. 响应标头:由服务器发送给客户端;其中包括有关服务器、内容类型和缓存策略的数据。

我们主要关注 用于网络抓取的请求标头 因为它们会影响服务器处理我们请求的方式。

Scrapy 默认标头

默认情况下,Scrapy 会在每个请求中发送基本标头,例如

{
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Encoding": "gzip、deflate",
"Accept-Language": "en",
"User-Agent": "Scrapy/2.11.0 (+https://scrapy.org)"
}

这些标头缺少一些真正的浏览器所包含的关键组件,例如

  • 推荐人:表示请求来自的 URL。
  • Sec-Ch-Ua:指定浏览器和平台详细信息,以增强合法性。
  • 不安全升级请求:通知服务器客户端更喜欢安全的 HTTPS 连接。

自定义这些标头可使您的请求看起来更真实,也更不容易被阻止。

如何在 Scrapy 中自定义页眉

在 Scrapy 中自定义页眉非常简单。以下是有效修改和管理标头的不同方法。

修改 settings.py

你可以在 Scrapy 的设置文件中定义自定义标头字典。该方法会将这些标头应用于蜘蛛的所有请求。

例如 settings.py

default_request_headers = {
'Accept-Language': 'en-US,en;q=0.9'。,
'Referer': 'https://www.google.com/',
'Accept': text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
'Accept-Encoding': gzip、deflate、br,
Sec-Ch-Ua: '"Not A(Brand";v="99", "Google Chrome";v="121", "Chromium";v="121"',
Sec-Ch-Ua-Platform: '"Windows"',
'User-Agent': Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36',
}

当蜘蛛发送请求时,这些标头将取代默认标头。

为特定请求使用自定义标题

如果您需要针对特定请求使用不同的头信息,可以使用 scrapy.Request 直接在蜘蛛文件中传递它们。

实例:蜘蛛中的自定义标题

import scrapy
class CustomHeaderSpider(scrapy.Spider):
name = "custom_header"
allowed_domains = ["httpbin.org"]
start_urls = ["https://httpbin.org/headers"]
def start_requests(self):
headers = {
"User-Agent": "Mozilla/5.0 (Linux; x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0 Safari/537.36",
"Sec-Ch-Ua-Platform: '"Linux"'"Linux,
}
for url in self.start_urls:
yield scrapy.Request(url, headers=headers, callback=self.parse)
def parse(self, response):
print(response.text)

这种方法适用于需要不同标头的多个域扫描。

动态标题修改

Scrapy 的下载器中间件 可以根据条件(如轮换用户代理)动态修改标头。这样,您就可以在请求发送前对其进行拦截和修改。了解更多 如何使用用户代理进行网络搜索.

范例:旋转用户代理的中间件

class RotateUserAgentMiddleware:
def process_request(self, request, spider):
user_agents = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"Mozilla/5.0 (Linux; x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0 Safari/537.36"
]
request.headers['User-Agent'] = random.choice(user_agents)
Add the middleware to settings.py:
DOWNLOADER_MIDDLEWARES = {
'myproject.middlewares.RotateUserAgentMiddleware': 543,
}

使用代理和反验证码服务

为进一步提高标头的合法性并绕过拦截,可考虑使用 代理服务 或 反验证码工具.这些服务会自动为您旋转页眉和用户代理。

示例:将 ZenRows 与 Scrapy 结合使用

import scrapy
class ZenRowsSpider(scrapy.Spider):
name = "zenrows"
allowed_domains = ["httpbin.org"]
start_urls = ["https://httpbin.org/headers"]
定义 start_requests(self):
proxy = "@api.zenrows.com:8001">http://YOUR_ZENROWS_API_KEY:@api.zenrows.com:8001"
for url in self.start_urls:
yield scrapy.Request(url,callback=self.parse, meta={"proxy": proxy})
定义 parse(self, response):
print(response.text)

网络抓取最重要的标题

某些标题对网络刮擦更为重要,因此应仔细定制:

  1. 用户代理: 这可以识别浏览器、操作系统和版本。为避免被检测到,请确保模拟真实浏览器。
  2. 推荐人 这表示请求的来源。将其设置为有意义的 URL,如 Google 搜索或上一页。
  3. 饼干 用于会话管理。它有助于保持登录状态或绕过访问限制。
  4. 接受语言 指定语言首选项。使用 en-US,en;q=0.9 来模拟英语浏览器。
  5. Sec-Ch-Ua: 包含浏览器和平台详细信息。它可帮助现代浏览器绕过高级反僵尸程序。
  6. 接受-编码: 通知服务器支持的压缩格式,如 gzip 或 br。

结论

标头是网络搜刮的重中之重。如果设置得当,你的搜刮就能顺利进行。通过在 Scrapy 中自定义标头,我可以让我的搜刮器看起来像一个真正的浏览器,避免被拦截,并更有效地收集数据。出色的第一步是在 settings.py 文件。对于更高级的功能,我可以探索使用中间件等动态解决方案。

不管我是在搜刮小型博客还是大型电子商务网站,学习如何管理 Scrapy 标头都会让一切变得不同。我将不断尝试、调整和改进我的设置,以确保我的搜刮器保持高效和低调。让我们以负责任的态度聪明地进行搜刮吧!

类似文章