web-dev-qa-db-ja.com

Scrapyでcloudflareボット/ ddos​​保護をバイパスする方法

私は製品の価格情報を得るために時々eコマースWebページをスクレイピングしていました。 Scrapyを使用して構築されたスクレーパーはしばらく使用しておらず、昨日使用しようとしていました-ボット保護で問題が発生しました。

CloudFlareのDDOS保護を使用しており、基本的にJavaScript評価を使用して、JSが無効になっているブラウザー(したがってスクレーパー)を除外します。関数が評価されると、計算された数の応答が生成されます。その見返りとして、サービスは各リクエストに添付された2つの認証Cookieを送り返し、通常はサイトをクロールできます。 ここ は、その仕組みの説明です。

また、 cloudflare-scrape Python外部JS評価エンジンを使用して番号を計算し、リクエストをサーバーに送信するモジュールを見つけました。それを Scrapy に統合するか、JS実行を使用せずにもっとスマートな方法がありますか?結局、それはフォームです...

私は助けを厚くします。

14
Kulbi

そこで、 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が既にありましたが、苦情はありませんでした。

13
Kulbi

明らかにこれを行う最良の方法は、CloudFlareでIPをホワイトリストに登録することです。これが適切でない場合は、 cloudflare-scrape ライブラリをお勧めします。これを使用してCookieトークンを取得し、このCookieトークンを Scrapy request でサーバーに提供できます。

3
mjsa