今回はBeautifulSoupを使っていきます。
python 3.6.0
BeautifulSoup 4.6.0
ドキュメントはコチラ
英語
http://www.crummy.com/software/BeautifulSoup/bs4/doc/
##インストール
$ pip install beautifulsoup4
##とりまBeautifulSoupを実行
このページのデータを取ってきてh1タグの中身を表示するプログラムです。
https://pythonscraping.com/pages/page1.html
from urllib.request import urlopen
from bs4 import BeautifulSoup
html=urlopen("https://pythonscraping.com/pages/page1.html")
bsobj=BeautifulSoup(html.read())
print(bsobj.h1)
このままでは、webページが見つからなかったり、予期せぬデータフォーマットでスクレイパーがエラーを吐いたりするので、例外処理を書いておくべきです。
##エラー対策
html=urlopen("https://pythonscraping.com/pages/page1.html")
この行はページが見つからないとエラーになってしまいます
なので、以下のように書き換えます。
try:
html=urlopen("https://pythonscraping.com/pages/page1.html")
except:
print("ページが見つかりません")
またこの行でもエラーが起きる可能性があります
bsobj=BeautifulSoup(html.read())
このように書き換えました。
try:
bsobj=BeautifulSoup(html.read())
print(bsobj.h1)
except:
print("error")
##目的のタグを見つける
find()とfindAll()を使うことで目的のタグを見つけることができます
次のコードは<span class="green"></span>
内のテキストを表示します
span_list = bsobj.findAll("span",{"class":"green"})
class="green"だけでなくclass="red"も表示したい場合は次のように書き換えます。
span_list = bsobj.findAll("span",{"class":{"red","green"}})
##タグを取り除く
span_list = bsobj.findAll("span",{"class":"green"})
for i in span_list:
print(i)
このコードでは<span class="green"></span>
のテキストを表示しますがタグも一緒に表示されてしまいます
中のテキストだけ欲しい場合は次のように書き換える必要があります
#タグも一緒に表示
print(i)
#タグ無しで表示
print(i.get_text)