こんにちは、エンジニアのオオバです。
前回記事からの続きです。
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構造を指定した形で要素の取得が出来ます。
最後に今回のサンプルコードです。
以下のように出力されます。
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を指定してサーバーから取得します。
この記事が気に入ったらフォローしよう
- macOS 10.12.6
- Python3.6.3
- BeautifulSoup4 4.6.0