こんにちは、エンジニアのオオバです。

前回記事からの続きです。

あわせて読みたい記事

Pythonによるファイルダウンロード

最低限の機械学習の知識を手に入れるため勉強中。

Pythonによるスクレイピング&機械学習

PythonのパーサーライブラリBeautifulSoupを使ってみます。
Beautiful Soup: We called him Tortoise because he taught us.

→11万文字で徹底解説した「DOTweenの教科書」Unityアニメーションの超効率化ツールはこちら

Python3版をインストール

pip3 install beautifulsoup4  

HTMLの要素を取得する

Python内に擬似的なhtmlコードを記述して以下の動作をテストします。

BeautifulSoupの初期化

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

第1引数にパースするhtmlを、第2引数にパーサーの指定をします。ここではHTMLをパースするため、html.parserと代入します。
今後のこのsoup変数を使ってパース結果を取得していきます。

DOM構造をルートから辿っていくやり方

<GoogleAdsense type='1' />

## h1要素の取得
soup.html.body.h1  

このようにhtmlからドットシンタックスでDOM要素をつなげて指定要素を取得することが出来ます。

id要素の取得

## id:piyoの取得
soup.find(id="piyo")  

find関数を使うと、最初の1つ目が取得できます。

## id:piyoの取得
soup.select("#piyo")  

select関数を使っても同様のことが出来ますが、find関数と違い配列が戻り値です。

class要素の取得

<GoogleAdsense type='1' />

## class:hogeの取得
soup.find(class_="hoge")  
soup.select(".hoge")  

先ほどのid要素取得と同様、find関数またはselect関数を使用して取得します。
※find関数の引数はclassではなくclass_です

指定要素全てを取得する

## 全a要素の取得
soup.find_all("a")  

属性値取得

link = soup.find("a")  
href = link.attrs['href']  

このように要素に対してattrsプロパティでアクセスし、属性名を文字列で配列アクセスすることで取得できます。

DOM構造を指定して取得

## DOM構造で取得する
listGroup = soup.select("ul#test > li")  

このようにselect関数と>を使ってDOM構造を指定した形で要素の取得が出来ます。

最後に今回のサンプルコードです。

beautifulsoup0.py · GitHub

以下のように出力されます。

h1: 渋谷ほととぎす通信  
p1: ブログ更新が  
p2: とてもとても  
idPiyo 滞っています  
piyo 滞っています  
classHoge でも頑張ります  
classHoge でも頑張ります  
URL https://www.shibuya24.info/  
URL https://www.shibuya24.info/archive/category/Unity  
URL https://www.shibuya24.info/archive/category/DOTween  
Unity  
DOTween  

最後に

今までローカルファイルに直書きしたHTMLでテストしましたが、
URLを指定してサーバーから取得します。

beautifulsoup1.py · GitHub

オススメ記事
検証環境