望月の息抜き

在宅勤務の息抜きです。主にプログラミングについて書いていきたいと思います。

【Python】【6】HTMLを解析してみよう

【記事の目標】

Pythonで取得したWebページの情報を解析する。

 

【作業手順】

1.Beautiful Soupをインストール

2.Beautiful Soupをインポート

3.Webページを取得して解析しよう

4.解析結果から欲しいタグの情報だけ抽出してみよう

 

1.Beautiful Soupをインストール

まずは、自分の開発環境にBeautiful Soupをインストールしましょう。

ターミナルにて以下コマンドを実行しましょう。

 linuxの場合:pip install beautifulsoup4
 windowsの場合:python -m pip install beautifulsoap4

windowsの場合は「py -m」を先頭に付ける必要があるので注意です。

以下のように、コマンド実行後にSuccessfully...と表示されれば完了です。

f:id:fysker:20220102015048p:plain


2.Beautiful Soupをインポート

【5】で実践したrequestsも合わせて、以下のようにインポートしましょう。

 import requests
from bs4 import BeautifulSoup

これで、Beautiful Soupが利用できるようになりました。

 

3.Webページを取得して解析しよう

まずは取得です。

【5】で実践した以下コードを書きましょう。

 if __name__ == '__main__':
site_data = requests.get("https://www.google.co.jp/")

この後に取得したデータをBeautiful Soupに読み込ませましょう。

 soup = BeautifulSoup(site_data.text, 'html.parser')

これでsoupという変数に、取得したHTMLが解析された状態で入っています。

 

4.解析結果から欲しいタグの情報だけ抽出してみよう

では早速、ページ内のリンクを全て取得してみましょう。

リンクはaタグで書かれ、href属性にURLが定義されています。

ではsoupからaタグのhref属性を取得してみましょう。

 links = [url.get('href') for url in soup.find_all('a')]
print(links)

このコードを実行すると以下のように出力されます。

f:id:fysker:20220102020315p:plain

Googleのトップページに定義されているURLが全て取得できました。

 

他にも、divタグのテキスト値のみ取得したい場合は、以下のようになります。

 divs = [div.get_text() for div in soup.find_all('div')]
print(divs)

このコードを実行すると以下のように出力されます。

f:id:fysker:20220102020940p:plain

Googleのトップページに定義されているテキストが全て取得できました。

 

 

【5】から引き続きスクレイピングの基礎となっていますが、今回の実戦も含めると実用性があるように思ってきませんか。

気になる情報をいち早くゲットするためであったり、Youtubeに動画をアップロードする際に同じような動画がないことを確認するために利用したり、といろいろ活用出来ると思います。

 

 

今回はHTMLを理解した上で、タグの取得やタグの属性の取得を実践しています。

HTMLがわからないぞという方は、コメントをいただければ、私の分かる範囲で別途記事を書こうと思います。

今年の年末年始は暇なので、いろいろ書いてみようと思っています。