Seleniumは、ウェブアプリケーションのテストを自動化するための強力なフレームワークとして広く知られていますが、それだけでなくウェブスクレイピングの強力なツールでもあります。
今回は、Selenium WebDriverを使用して特定のWebページにアクセスし、指定した文字列のテキストに埋め込まれたすべてのリンク要素を取得し、それらのリンクのURLを一覧表示するサンプルプログラムを作成します。
このプログラムは、Seleniumを使用してウェブページから特定のテキストを含むリンクを効率的に抽出する方法を示しています。
Webページからのリンク情報収集を自動化することにより、業務の効率化に役立ちますので、ぜひ活用してみてください。
- Seleniumのインストール方法
- Seleniumで指定した文字列の埋め込みリンクを取得するPythonサンプルコード
Seleniumとは
Seleniumは、ウェブアプリケーションのテストを自動化するフレームワークで、Selenium WebDriverを使ってプログラムからブラウザを制御します。
多くのプログラム言語とブラウザに対応し、ウェブページの要素を操作やユーザーアクションのシミュレーションが可能です。また、ウェブスクレイピングにも利用され、ウェブページからデータを効率的に抽出する作業を支援します。
ライブラリのインストール
必要なライブラリをインストールするため、コマンドプロンプトで以下のコマンドを実行してください。
pip install selenium
作成したPythonコード
このプログラムは、SeleniumのWebDriverを使用して指定されたWebページにアクセスし、‘Link’というテキストに埋め込まれているすべてのリンク要素を取得し、それらのリンクのURLを一覧表示します。
今回は具体的な例として、画像AIで使用できるモデルを一覧で紹介している以下のページのダウンロードサイトのリンク一覧を作成します。
最後に、WebDriverインスタンスを閉じてリソースを解放します。
このプログラムは、ウェブスクレイピングにおいて特定のテキストを含むリンクを効率的に抽出する方法を示しています。
コード解説
main
関数の定義:- 主要なスクレイピング処理を
main
関数内にまとめます。
- 主要なスクレイピング処理を
- WebDriverのインスタンス作成:
- ChromeのWebDriverインスタンスを作成します。
- URLへのアクセス:
- 指定されたURLにアクセスします。
- ページロードの待機:
- WebDriverWaitとexpected_conditionsを使用して、ページが完全にロードされるまで待機します。この例では、’Link’というテキストを含むリンクが存在することを確認しています。
- リンクの取得:
driver.find_elements
メソッドとBy.PARTIAL_LINK_TEXT
定数を使用して、’Link’というテキストを含むすべてのリンク要素を取得します。
- リンクのURLの一覧表示:
- 取得したリンク要素のリストをループし、各リンク要素から
href
属性を取得してURLを表示します。
- 取得したリンク要素のリストをループし、各リンク要素から
- リソースの解放:
- 最後にWebDriverインスタンスを閉じてリソースを解放します。
- プログラムの実行:
- スクリプトが直接実行されたときに
main
関数を呼び出します。
- スクリプトが直接実行されたときに
作成した全体のソースコード
# seleniumのwebdriverとexpected_conditionsをインポートします
from selenium import webdriver
from selenium.webdriver.common.by import By
# WebDriverWaitとexpected_conditionsをインポートします
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def main():
# ChromeのWebDriverオブジェクトを作成します
driver = webdriver.Chrome()
try:
# 指定のURLにアクセスします
driver.get('https://murasan-net.com/index.php/2023/06/07/stable-diffusion-model-list/')
# ページが完全にロードされるまで待ちます
WebDriverWait(driver, 10).until(
EC.presence_of_all_elements_located((By.PARTIAL_LINK_TEXT, 'Link'))
)
# 'Link'と書かれているテキストに埋め込まれているすべてのリンクを取得します
links = driver.find_elements(By.PARTIAL_LINK_TEXT, 'Link')
# リンクのURLを一覧表示します
for index, link in enumerate(links, start=1):
url = link.get_attribute('href')
print(f'{index}. {url}')
finally:
# WebDriverを閉じて、リソースを解放します
driver.quit()
# main関数を呼び出してプログラムを実行します
if __name__ == '__main__':
main()
実行結果
先ほど作成したコードを実行すると、以下のように一覧表の「Link」という文字列に埋め込まれているリンク情報を、自動で抽出することができました。
DevTools listening on ws://127.0.0.1:64441/devtools/browser/bb84e67e-8b9e-4e11-8aac-2a0abbed4eff
1. https://civitai.com/models/125680/cherry-picker-xl
2. https://civitai.com/models/137909?modelVersionId=152311
3. https://civitai.com/models/129830/fudukimix
4. https://huggingface.co/BanKaiPls/AsianModel/blob/main/Brav6.safetensors
5. https://huggingface.co/sazyou-roukaku/BracingEvoMix
6. https://civitai.com/models/25494/brabeautiful-realistic-asians-v2
7. https://murasan-net.com/index.php/2023/04/29/stable-diffusion-automatic1111-checkpoint-merger/
8. https://huggingface.co/sazyou-roukaku/GenesisLifeMix
9. https://civitai.com/models/47507?modelVersionId=52102
10. https://civitai.com/models/13564/musev1
11. https://civitai.com/models/6424/chilloutmix
12. https://civitai.com/models/118545
13. https://huggingface.co/Vsukiyaki/Negi-Mix
14. https://civitai.com/models/136389
15. https://civitai.com/models/118406/counterfeitxl
16. https://huggingface.co/Linaqruf/animagine-xl
17. https://huggingface.co/konapieces/LastpieceCoreXL
18. https://civitai.com/models/119012?modelVersionId=141848
19. https://civitai.com/models/126259?modelVersionId=137992
20. https://civitai.com/models/121083?modelVersionId=133890
21. https://civitai.com/models/83555/shungiku-mix
22. https://huggingface.co/natsusakiyomi/HimawariMixs/tree/main
23. https://civitai.com/models/105047?modelVersionId=123633
24. https://huggingface.co/Vsukiyaki/ShiratakiMix
25. https://huggingface.co/natsusakiyomi/SakuraMix
26. https://huggingface.co/Vsukiyaki/SukiAni-mix
27. https://huggingface.co/Deyo/SEmix
28. https://huggingface.co/Xynon/SD-Silicon
29. https://huggingface.co/Deyo/Deyoyoyo
30. https://huggingface.co/andite/pastel-mix
31. https://huggingface.co/Vsukiyaki/SukiyakiMix-v1.0
32. https://huggingface.co/morit-00/MORIMORImix
33. https://huggingface.co/Defpoint/Defmix-v2.0
34. https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/blob/main/sd_xl_base_1.0.safetensors
35. https://huggingface.co/stabilityai/stable-diffusion-2-1/resolve/main/v2-1_768-ema-pruned.safetensors
PS C:\user\lab\projetc\dxapp\scraping>
まとめ
今回、サンプルコードで解説したように、Seleniumを使うと特定のテキストを含むリンクを簡単に抽出し、URLを一覧表示することが可能です。
このように、Seleniumはテスト自動化だけでなく、ウェブページからのデータ抽出においても非常に有用であり、幅広いプログラム言語とブラウザのサポートにより、多様なウェブスクレイピングのシナリオに対応できます。
ぜひ業務の効率化に取り入れてみてください。
それでは、また次の記事でお会いしましょう。
コメント