【実験】PythonでMechanicalSoupを用いてリンクを辿る

PythonでMechanicalSoupを用いてリンクを辿ってみます。

今回はMechanicalSoupを用います。このライブラリ・モジュールは、Pythonの標準ライブラリではありませんので、事前にインストールする必要があります。

■Python

今回のPythonのバージョンは、「3.8.5」を使用しています。(Windows10)(pythonランチャーでの確認)

■MechanicalSoupを用いてリンクを辿る

それでは早速、MechanicalSoupを用いてリンクを辿るスクリプトを書いていきます。

■コード

import mechanicalsoup

browser = mechanicalsoup.StatefulBrowser()

browser.open("https://laboratory.kazuuu.net/")

browser.follow_link("お問い合わせ・相談")

print(browser.url)

importでmechanicalsoupモジュールを呼び出します。その後、browserという変数を定義し、その中でmechanicalsoup.StatefulBrowser()を用いて、ブラウザオブジェクトを作成。

作成後、open()を用いて括弧内にWebページを渡します。これで指定したWebページを開くことができます。今回は、当サイト(https://laboratory.kazuuu.net/)を指定しています。

指定後、follow_link()を用いて括弧内に日本語のテキストを渡し、一致するリンクを辿ってみます。

最後に、browser.url()を用いて辿った後のURLをprint()で出力してみます。

■実行・検証

このスクリプトを「web_dialogue.py」という名前で、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、コマンドプロンプトから実行してみます。

Traceback (most recent call last):
  File "web_dialogue.py", line 7, in 
    browser.follow_link("お問い合わせ・相談")
  File "C:\Users\user_\AppData\Roaming\Python\Python38\site-packages\mechanicalsoup\stateful_browser.py", line 354, in follow_link
    link = self._find_link_internal(link, bs4_args,
  File "C:\Users\user_\AppData\Roaming\Python\Python38\site-packages\mechanicalsoup\stateful_browser.py", line 324, in _find_link_internal
    return self.find_link(*args, **kwargs)
  File "C:\Users\user_\AppData\Roaming\Python\Python38\site-packages\mechanicalsoup\stateful_browser.py", line 298, in find_link
    raise LinkNotFoundError()
mechanicalsoup.utils.LinkNotFoundError

実行してみると、「mechanicalsoup.utils.LinkNotFoundError」というエラーが発生し、リンクを辿ることができませんでした。原因を探ってみると、MechanicalSoupのドキュメントでは、「Form のメソッドが、間違った型(または不正な型)の HTML 要素に対して使用された場合に発生します。」という内容が書かれていたので、スクリプトを変更してみることにしました。

■コード

import mechanicalsoup

browser = mechanicalsoup.StatefulBrowser()

browser.open("https://laboratory.kazuuu.net/")

browser.follow_link("inquiry-form")

print(browser.url)

変更した内容は、follow_link()を用いる時に日本語のテキストではなく、開いたWebページ内のURLに含まれる英文字を一致させ、一致した場合にリンクを辿るというものです。

■再度検証

変更したスクリプトを「web_dialogue.py」という名前で、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、コマンドプロンプトから実行してみます。

実行してみると、今度はエラーは発生せずに、follow_link()を用いたことで、指定されたテキストと一致するリンクを辿り、辿った後のURLをprint()関数で出力させることができました。

コメント

タイトルとURLをコピーしました