DrissionPageを使ってみる
Pythonを利用したウェブスクレイピングには、通常はSeleniumやBeautifulSoupといったライブラリが使用されますが、DrissionPageという比較的新しい選択肢も存在します。
DrissionPageはCloudflareによるボット検知を回避することができ、構文も簡単で明快です。また、不安定なネットワークに対する待機や自動リトライ機能なども備えており、非常に便利なライブラリです。
Github
Document
使用方法
下記コマンドでインストールします。
pip install DrissionPage
Pythonを使用してデータパケットの送受信のみを行う場合、`SessionPage`を利用することができます。
from DrissonPage import SessionPage
今回は`ChromiumPage`を使用します。
from DrissionPage import ChromiumPage
webサイトにログインする機能を実装してみる
from DrissionPage import ChromiumPage
email = 'your-email'
password = 'your-password'
login_end = 'login-endpoint-url'
page = ChromiumPage() #Chromium()オブジェクトを作成
page.get(login_end)
ele = page.ele('#email')
ele.input(email)
page.ele('#password').input(password)
page.ele('.submit').click()
page.get(login_end)
`get()`メソッドはパラメータ内のURLにアクセスするために使用されます。ページが完全にロードされるのを待ってから、以後のコードを実行します。
ele = page.ele('#email')
ele.input(email)
`ele()` メソッドは、要素を探索して `ChromiumElement` オブジェクトを返します。これを使用して要素を操作します。また、`#` は `id` 属性を使用して要素を検索するために使用されます。
また、`ele()`には待機が組み込まれており、要素がロードされていない場合、要素が現れるか、タイムアウト期限に達するまで待機します。デフォルトのタイムアウト時間は10秒です。
`input()` メソッドは要素にテキストを入力するために使用されます。
page.ele('#password').input(password)
これはemailの入力と同等の操作です。
page.ele('.submit').click()
ここで`.`は`class`属性で要素を探すという意味で、`click()`メソッドにてその要素をクリックしています。
`value`属性や`name`属性、タグでの検索などもできます。
page.ele('@value=Value') #value属性がValueの要素を取得
page.ele('@name=Name') #name属性がNameの要素を取得
page.ele('tag:h1') #タグがh1の要素を取得
なお、複数の要素を取得したい場合は`eles()`メソッドを使用することができます。
links = page.eles('tag:a')
for link in links:
print(link.text, link.link)
`.text`では要素のテキストを取得し、`.link`では要素の`href`あるいは`src`属性を取得します。