辅助 SplashRequest 始终呈现 Cloudflare 响应

问题描述

我正在抓取一个允许使用机器人的网站,该网站使用的是 cloudflare,但我不相信它对此并不严格。我遇到的问题是我正在根据类别抓取一些链接,在收集这些链接后,我想发送一个新的 SplashRequest 来呈现新的 html 链接

无论我做什么/尝试额外的 SplashRequest 都会导致 cloudflare 检测页面,即使我将刮板更改为仅抓取 1 个链接并尝试这样做。是否所有相同的标头都会在后续请求中传递?我这里的音量很小,我不认为这是 cloudflare 由于我的行为而识别刮板,除非它与标题/用户代理有关?所有这些查询在本地主机启动时都完全正常。

我不是在这里寻找解决方案,只是想了解可能导致这种行为的原因?

import scrapy
from urllib.parse import urljoin
from scrapy_splash import SplashRequest


class ExampleSpider(scrapy.Spider):
    name = "example"
    start_urls = ['https://www.example.com']

    def start_requests(self):
        for url in self.start_urls:
            yield SplashRequest(url,self.parse,args={'wait': 0.5})

    def parse(self,response):
        example_dict = {}
        for item in response.css("ul._3o1ZveERyh3pMDbbdZeBHE").css("li").css('a::attr(href)').getall():
            example_dict['link'] = urljoin('https://example.com/',item)
        yield example_dict
        yield SplashRequest(example_dict['link'],self.parse_people_links,args={'wait': 0.5})

    def parse_people_links(self,response):
        from scrapy.shell import inspect_response
        inspect_response(response,self)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)