前言

Scrapy突破JA3指纹限制是一个在爬虫开发中经常遇到的问题,尤其是当目标网站采用了基于TLS指纹(如JA3指纹)的反爬虫机制时。JA3指纹是一种基于TLS握手过程中客户端发送的加密套件和扩展信息的唯一标识符,网站可以通过分析这些指纹来识别并阻止非法的爬虫请求

Scrapy突破JA3指纹(附完整代码)_scrapy

思路

自定义Scrapy的下载处理器,以控制TLS握手过程。

具体步骤:

  1. 创建一个自定义的下载处理器类,继承自Scrapy的HTTPDownloadHandler。
  2. 在自定义的下载处理器中重写处理TLS握手的方法,以使用不同的加密套件或TLS扩展。
  3. 在Scrapy的设置中配置使用自定义的下载处理器。

示例代码

# 安装Scrapy 2.6或更高版本
pip install Scrapy==2.6
pip install scrapy-ja3
from scrapy import Request, Spider


class Ja3TestSpider(Spider):
    name = 'ja3_test'

    custom_settings = {
        'DOWNLOAD_HANDLERS': {
            'http': 'scrapy_ja3.download_handler.JA3DownloadHandler',
            'https': 'scrapy_ja3.download_handler.JA3DownloadHandler',
        }
    }

    def start_requests(self):
        start_urls = [
            'https://tls.browserleaks.com/json',
        ]
        for url in start_urls:
            yield Request(url=url, callback=self.parse_ja3)

    def parse_ja3(self, response):
        self.logger.info(response.text)
        self.logger.info("ja3_hash: " + response.json()['ja3_hash'])

注意事项

由于网站的反爬虫机制可能会不断更新和改进,因此上述方法可能不是永久有效的解决方案。你需要定期更新你的爬虫系统以应对新的反爬虫技术。
在实施相关解决方案时,请务必谨慎行事,并充分考虑安全性和可维护性。