前回作った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")
コメント