BeautifulSoup4
BeaurifulSoup4はHTMLやXMLファイルを解析することができる、いわゆるWEBスクレイピングが可能になるPythonのライブラリの一つ。
少し難しく言うと、、、
Beautiful Soup はHTMLやXMLファイルからデータを取得するPythonのライブラリです。あなたの好きなパーサー(構文解析器)を使って、パースツリー(構文木)の探索、検索、修正を行います。 これはプログラマーの作業時間を大幅に短縮してくれます。
ドキュメント
様々な参考サイト※1を元に、同じような内容だけど、自分なりにまとめてみる。
まずはBeaurifulSoup のドキュメンテーションから。
日本語訳もある。
基本的な取得イメージの完成形
以下のコードはtarget_urlで指定したサイトのリンク先URLをすべて取得するコード。
import requests
from bs4 import BeautifulSoup
target_url = '***'
r = requests.get(target_url)
soup = BeautifulSoup(r.text, 'lxml')
for a in soup.find_all('a'):
print(a.get('href'))
インストール
BeautifulSoup
BeautifulSoupはpipコマンドでインストール出来る。
$ pip install BeautifulSoup
requests
BeautifulSoupを使う場合には、だいたいこのモジュールも呼び出すことになる。
requestsは取得したHTTP構造から必要な情報(テキスト)を取得するのに使う。
$ pip install requests
インポート
from bs4 import BeautifulSoup
bs4はBeatifulSoupが格納されたパッケージ。
下のようにbs4全体を呼び出しているようなサンプルも見かけるが、無駄なパッケージも呼んでいると思うので、上の記述の方がよいだろう。
import bs4
情報を取得するrequestsパッケージも同時に呼び出す。
import requests
データを取得するURLを指定し、BeautifulSoupにセットする。
lxmlはパーサー(persor、構文解析器)と呼ばれている。
※lxmlについてこちらのサイトに詳しく説明がある。
requestパッケージについては、別途まとめる。
メソッド
メソッドの説明をするために、事前にデータを取得しておく。
target_url = 'https://www.yahoo.co.jp/'
r = requests.get(target_url)
soup = BeautifulSoup(r.text, 'lxml')
基本操作
soup.string #文字列を取得する
データ取得系
soup.title #titleタグを取得する。
soup.title.string #titleタグで囲まれた文字列を取得する
soup.head #headタグを取得する。
soup.find('a') #aタグをすべて取得する。
soup.find_all('a') #aタグをすべて取得する。
soup.a #1つめのaタグを取得する。
soup.a.get("href") #hrefの値(つまりurl)を取得する
soup.select('a[href^="http://"]') # CSSセレクタ
使用例サンプル
例1)リンク先がYahoo!pickupのをすべて取得する。
soup.find_all(href=re.compile("news.yahoo.co.jp/pickup"))
例2)リンク先の属性指定
soup.find_all("a", class_="link", href="/link")
soup.find_all("a", attrs={"class": "link", "href": "/link"})
soup.find_all(class_="link", href="/link")
soup.find_all(attrs={"class": "link", "href": "/link"})
※class_だけアンダースコアがついているので注意。
例3)正規置換
import re
soup.find_all(re.compile("^b")) #bで始まるタグ
soup.find_all("a", text=re.compile("hello"))
出力系
soup.prettify() #取得した構文を表示する。