BeautifulSoup4を使ってみる

前回作ったPython3環境でBeautifulSoup4を使う。

BeautifulSoupとは

HTMLをフォーマット化し、XML構造としてアクセスできるPythonオブジェクトに変換してくれる。
つまり、タグを指定してHTMLから値を取得してきてくれる。

Anaconda4.1.0にはデフォルトで入っていた。

conda list | grep beautifulsoup4

# 以下が表示
beautifulsoup4 4.4.1 py35_0

なかったらいれよう。

pip install beautifulsoup4

BeautifulSoupを使ってhtmlをパースする

BeautifulSoupを使ってみる。

vim scrapetest.py
from urllib.request import urlopen
from bs4 import BeautifulSoup

html = urlopen("http://www.pythonscraping.com/pages/page1.html")
bsObj = BeautifulSoup(html.read(), "lxml")
print(bsObj.h1)

実行。

python scrapetest.py

対象URLのh1が取得出来たら成功。

本来はurlopenとBeautifulSoupの処理は、例外を考えたコーディングする必要がある。

その書き方は「PythonによるWebスクレイピング」を見てね。

補足:BeautifulSoupを使うときはParserを指定

書籍通りのコードを実行すると以下のコメントが表示された。

/home/vagrant/.pyenv/versions/anaconda3-4.1.0/lib/python3.5/site-packages/bs4/__init__.py:166: UserWarning: No parser was explicitly specified, so I'm using the best available HTML parser for this system ("lxml"). This usually isn't a problem, but if you run this code on another system, or in a different virtual environment, it may use a different parser and behave differently.

To get rid of this warning, change this:

BeautifulSoup([your markup])

to this:

BeautifulSoup([your markup], "lxml")

markup_type=markup_type))

BeautifulSoupを使うときはHTML Parserを指定しろとのこと。lxmlを推奨するとのこと。

# BeautifulSoup([your markup])
BeautifulSoup([your markup], "lxml")

参考

PythonによるWebスクレイピング

Beautiful Soup 4.x では parser を明示指定しよう

コメント

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