5
7

Cloudflareのbot検知を回避するDrissionPageを紹介します

Last updated at Posted at 2023-12-20

はじめに

この記事では、Cloudflareのbot検知を回避してスクレイピングを行う方法について紹介します。

CloudflareのBot検知とは

CloudflareにはBotを検知する機能があります。Botだと検知されると、確認画面が表示され、永遠にループすることがあります。

cloudflare-bot.png

従来の回避方法

以前は、下記のundetected-chromedriverライブラリを用いることで回避できましたが、2023年12月20日現在では効果がありません。

DrissionPage

このundetected-chromedriverのissueでも取り上げられている、bot検知を回避できるライブラリが「DrissionPage」です。

中国語で書かれていますが、翻訳機能やAIを活用すれば理解できます。

DrissionPageは、requestsベースのデータ収集の速さと、ブラウザベースのデータ収集の容易さを組み合わせるように設計されています。このライブラリは、共通の機能をカプセル化し、開発と実行の効率を向上させるためのユーザーフレンドリーなインターフェースを提供します。速くて効率的であり、シンプルさと便利さに焦点を当てて設計されています。

このライブラリには独自のカーネルがあり、多くの便利な機能があります。異なるブラウザバージョン用の異なるドライバーを必要とせず、より高速に動作し、iframe間での要素の検索を切り替えることなく行い、ブラウザ内の複数のタブを同時に操作でき、ブラウザキャッシュから画像を保存し、ウェブページ全体のスクリーンショットを撮ることができ、shadow-rootの非オープン状態を扱うことができます。

このライブラリには他にも多くの機能があります。

シンプルな構文規則と統合された共通機能。
簡単で安定した要素の位置決め。
不安定なネットワークに対する待機と自動リトライ機能。
強力なダウンロードツール。
既に開いているブラウザの再利用。
一般的な設定を保存するためのiniファイルの使用。
解析エンジンとしてのlxmlの組み込み。
POMモードのカプセル化の使用、テストに適しており拡張が容易。

DrissionPageを使ったスクレイピング方法

セットアップ

pip install drissionpage

Seleniumとの比較

Selenium使用例

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service

service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service)
driver.get("取得したいページのURL")
html = driver.page_source

DrissionPage使用例

from DrissionPage import ChromiumPage

page = ChromiumPage()
page.get("取得したいページのURL")
html_content = page.html
page.quit()

検証

Cloudflareを使用するサイトでの検証を行います。

検証サイト

https://uniteapi.dev/meta

このサイトのrobots.txtではスクレイピングが許容されています。

User-Agent: *
Allow: /

Sitemap: https://uniteapi.dev/sitemap.xml

とはいえ高負荷を与えないように注意を払いましょう

Selenium使用時

selenium-2.gif

DrissionPage使用時

drissionpage.gif

SeleniumではCloudflareによってブロックされますが、DrissionPageを使用すると回避できることが確認されました。

5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7