私は製品の価格情報を得るために時々eコマースWebページをスクレイピングしていました。 Scrapyを使用して構築されたスクレーパーはしばらく使用しておらず、昨日使用しようとしていました-ボット保護で問題が発生しました。
CloudFlareのDDOS保護を使用しており、基本的にJavaScript評価を使用して、JSが無効になっているブラウザー(したがってスクレーパー)を除外します。関数が評価されると、計算された数の応答が生成されます。その見返りとして、サービスは各リクエストに添付された2つの認証Cookieを送り返し、通常はサイトをクロールできます。 ここ は、その仕組みの説明です。
また、 cloudflare-scrape Python外部JS評価エンジンを使用して番号を計算し、リクエストをサーバーに送信するモジュールを見つけました。それを Scrapy に統合するか、JS実行を使用せずにもっとスマートな方法がありますか?結局、それはフォームです...
私は助けを厚くします。
そこで、 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が既にありましたが、苦情はありませんでした。
明らかにこれを行う最良の方法は、CloudFlareでIPをホワイトリストに登録することです。これが適切でない場合は、 cloudflare-scrape ライブラリをお勧めします。これを使用してCookieトークンを取得し、このCookieトークンを Scrapy request でサーバーに提供できます。