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

时间:2015-10-20 22:07:24

标签: javascript python cookies scrapy

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

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

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

我会帮助你。

3 个答案:

答案 0 :(得分:12)

所以我在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})

除了解析函数。就是这样!

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

答案 1 :(得分:3)

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

答案 2 :(得分:0)

如果出现503错误,则可以遵循以下准则:

  1. 转到settings.py
  2. 搜索:USER_AGENT
  3. 在这里您会通过刮擦看到默认漫游器用户代理。 将此默认值替换为:
    USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'