banner
andrewji8

Being towards death

Heed not to the tree-rustling and leaf-lashing rain, Why not stroll along, whistle and sing under its rein. Lighter and better suited than horses are straw sandals and a bamboo staff, Who's afraid? A palm-leaf plaited cape provides enough to misty weather in life sustain. A thorny spring breeze sobers up the spirit, I feel a slight chill, The setting sun over the mountain offers greetings still. Looking back over the bleak passage survived, The return in time Shall not be affected by windswept rain or shine.
telegram
twitter
github

seleniumの新しい代替品---DrissionPage

今日は、Python ベースのウェブオートメーションツールである DrissionPage を皆さんにおすすめします。このツールはブラウザの制御だけでなく、データパケットの送受信も可能であり、両者を組み合わせることもできます。要するに、ウェブブラウザの自動化の利便性と requests の高効率を組み合わせたものです。

ウェブの自動化には通常、2 つの形式があります。

  1. サーバーにリクエストデータパケットを直接送信し、必要なデータを取得し、データフローの操作を模倣します。

  2. ブラウザを制御してウェブページと対話し、ユーザーインターフェースの操作を模倣します。

前者は軽量で高速であり、例えば requests ライブラリがあります。しかし、requests はログインが必要なウェブサイトに対しては、しばしばキャプチャ、JS の混乱、署名パラメータなどのスクレイピング対策に対処する必要があり、ハードルが高いです。また、データが JS によって生成される場合、計算プロセスを再現する必要もあり、開発効率が低下します。

一方、後者はブラウザを直接使用し、ユーザーの操作を模倣するため、Selenium ライブラリなどを使用すると、これらの問題をかなり回避することができますが、ブラウザの実行効率は高くありません。

そのため、DrissionPage はこれらを組み合わせ、必要に応じて適切なモードに切り替えることができるように設計されており、使いやすい方法を提供し、開発および実行効率を向上させることを目指しています。

画像

特徴:

  • webdriver の特徴なし
  • 異なるバージョンのブラウザ用に異なるドライバをダウンロードする必要なし
  • より高速な実行速度
  • iframe 内の要素を横断的に検索でき、切り替える必要がない
  • iframe を通常の要素として扱い、取得した後に直接要素を検索できるため、論理がより明確になります
  • 非アクティブな状態のタブを含む複数のタブを同時に操作できる
  • ブラウザのキャッシュから直接画像を読み取ることができ、GUI を介さずに保存する必要がありません
  • ページ全体のスクリーンショットを撮影できます(バージョン 90 以上のブラウザでサポート)
  • 非 open 状態の shadow-root を処理できます

プロジェクトのアドレス:

https://gitee.com/g1879/DrissionPage

DrissionPage の pip を使用したインストール方法:

pip install DrissionPage -i https://pypi.tuna.tsinghua.edu.cn/simple

アプリケーションの例:猫眼映画の TOP100 ランキングを収集する

この例では、ブラウザを使用してデータを収集します。

ターゲット URL:https://www.maoyan.com/board/4

サンプルコード

以下のコードは直接実行できます。

注意点として、ここではレコーダーオブジェクトが使用されていることに注意してください。詳細は DataRecorder を参照してください。

from DrissionPage import ChromiumPage
from DataRecorder import Recorder

# ページオブジェクトを作成する
page = ChromiumPage()

# レコーダーオブジェクトを作成する
recorder = Recorder('data.csv')

# ウェブページにアクセスする
page.get('https://www.maoyan.com/board/4')

while True:
    # ページ上のすべてのdd要素を反復処理する
    for mov in page.eles('t:dd'):
        # 必要な情報を取得する
        num = mov('t:i').text
        score = mov('.score').text
        title = mov('@data-act=boarditem-click').attr('title')
        star = mov('.star').text
        time = mov('.releasetime').text
        # レコーダーに書き込む
        recorder.add_data((num, title, star, time, score))

    # 次のページボタンを取得し、クリックする
    btn = page('下一页', timeout=2)
    if btn:
        btn.click()
        page.wait.load_start()
    # ボタンがない場合はプログラムを終了する
    else:
        break

recorder.record()

さて、この便利なライブラリである DataRecorder について説明します。

https://gitee.com/huiwei13/data-recorder

マイナーですが、使いやすいです。

データを一定数キャッシュしてから一度に書き込むことで、ファイルの読み書き回数を減らし、負荷を軽減します。

複数のスレッドで同時にデータを書き込むことができます。

ファイルが開いている場合、ファイルが閉じられるのを待ってから書き込むため、データの損失を防ぎます。

断点継続スクレイピングをサポートしています。

データの簡単な一括移動が可能です。

辞書データに基づいて自動的にヘッダーを作成できます。

ファイルとパスを自動的に作成するため、コード量を減らすことができます。

レコーダー Recorder

Recorder は、シンプルで直感的で効率的な機能を持っており、1 つのアクションのみを行います。つまり、データを連続して受け取り、順番にファイルに追加します。単一行のデータまたは 2 次元データを一度に複数行書き込むことができます。

csv、xlsx、json、txt の 4 つの形式のファイルをサポートしています。

from DataRecorder import Recorder

data = ((1, 2, 3, 4), 
        (5, 6, 7, 8))

r = Recorder('data.csv')
r.add_data(data)  # 複数行のデータを一度に追加
r.add_data('abc')  # 単一行のデータを追加

フィラー Filler

Filler は、表形式のファイルにデータを書き込むために使用されます。座標を指定することができます。非常に柔軟に使用でき、左上隅の座標を指定して 2 次元データを埋め込むことができます。また、データの処理の進捗状況を記録する機能(例:断点継続スクレイピング)も提供しています。さらに、セルにリンクを設定することもできます。

csv および xlsx 形式のファイルのみをサポートしています。

from DataRecorder import Filler

f = Filler('results.csv')
f.add_data((1, 2, 3, 4), 'a2')  # A2セルから始まり、1行のデータを書き込む
f.add_data(((1, 2), (3, 4)), 'd4')  # D4セルを左上隅として、2次元データを書き込む
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。