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`属性を取得します。


いいなと思ったら応援しよう!