前回記事からの続きです。
最低限の機械学習の知識を手に入れるため勉強中。
PythonのパーサーライブラリBeautifulSoupを使ってみます。
Beautiful Soup: We called him Tortoise because he taught us.
Python3版をインストール
pip3 install beautifulsoup4
HTMLの要素を取得する
Python内に擬似的なhtmlコードを記述して以下の動作をテストします。
- 指定要素の取得
- 複数要素の取得
- 属性値の取得
BeautifulSoupの初期化
soup = BeautifulSoup(html, 'html.parser')
第1引数にパースするhtmlを、第2引数にパーサーの指定をします。ここではHTMLをパースするため、html.parser
と代入します。
今後のこのsoup変数を使ってパース結果を取得していきます。
DOM構造をルートから辿っていくやり方
# h1要素の取得
soup.html.body.h1
このようにhtmlからドットシンタックスでDOM要素をつなげて指定要素を取得することが出来ます。
id要素の取得
# id:piyoの取得 soup.find(id="piyo")
find関数を使うと、最初の1つ目が取得できます。
# id:piyoの取得 soup.select("#piyo")
select関数を使っても同様のことが出来ますが、find関数と違い配列が戻り値です。
class要素の取得
# 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構造を指定した形で要素の取得が出来ます。
最後に今回のサンプルコードです。
以下のように出力されます。
h1: 渋谷ほととぎす通信 p1: ブログ更新が p2: とてもとても idPiyo 滞っています piyo 滞っています classHoge でも頑張ります classHoge でも頑張ります URL http://www.shibuya24.info/ URL http://www.shibuya24.info/archive/category/Unity URL http://www.shibuya24.info/archive/category/DOTween Unity DOTween
最後に
今までローカルファイルに直書きしたHTMLでテストしましたが、URLを指定してサーバーから取得します。
本ブログのURLを指定すると、このように出力されます。
渋谷ほととぎす通信
参考サイト
環境
- macOS 10.12.6
- Python3.6.3
- BeautifulSoup4 4.6.0