如何在Scrapy中绕过cloudflare bot/ddos​​保护?

Kul*_*lbi 14 javascript python cookies scrapy

我曾经偶尔搜索电子商务网页以获取产品价格信息.我有一段时间没有使用使用Scrapy构建的刮刀,昨天试图使用它 - 我遇到了机器人保护问题.

它正在使用CloudFlare的DDOS保护,它基本上使用JavaScript评估过滤掉禁用JS的浏览器(以及因此刮刀).评估函数后,将生成带有计算数字的响应.作为回报,服务发送回两个身份验证cookie,附加到每个请求允许正常爬网站点.以下是它如何工作的描述.

我还发现了一个cloudflare-scrape Python模块,它使用外部JS评估引擎来计算数量并将请求发送回服务器.我不知道如何将它整合到Scrapy中.或者可能有一种更聪明的方式而不使用JS执行?最后,它是一种形式......

我会帮助你.

Kul*_*lbi 14

所以我在cloudflare-scrape的帮助下使用Python执行JavaScript .

对于您的刮刀,您需要添加以下代码:

def start_requests(self):
  for url in self.start_urls:
    token, agent = cfscrape.get_tokens(url, 'Your prefarable user agent, _optional_')
    yield Request(url=url, cookies=token, headers={'User-Agent': agent})
Run Code Online (Sandbox Code Playgroud)

与解析功能一起.就是这样!

当然,您需要先安装cloudflare-scrape并将其导入蜘蛛.您还需要安装JS执行引擎.我已经有了Node.JS,没有抱怨.

  • cfscrape 不再工作且不再维护,如下所示:https://github.com/Anorov/cloudflare-scrape/issues/347 (2认同)
  • 该库无法运行(2021 年 4 月 28 日)。可能开发者不感兴趣。`ValueError:无法识别网站上的 Cloudflare IUAM Javascript。Cloudflare 可能改变了他们的技术,或者脚本中可能存在错误。 (2认同)

mjs*_*jsa 7

显然,最好的方法是在 CloudFlare 中将您的 IP 列入白名单;如果这不合适,让我推荐cloudflare-scrape库。您可以使用它来获取 cookie 令牌,然后在您的Scrapy 请求中将此 cookie 令牌提供回服务器。