スクレイピング
目的
- 標準ライブラリ「urllib.request」を使ってサイトにアクセスし、htmlを取得する
- 取得したhtmlを「BeautifulSoup」を用いて解析、要素を取得する
前提
- BeautifulSoupをインストールしていること
書くこと
- urlopen()
- decode()
- BeautifulSoup()
- Beautifulsoup.find()
- Beautifulsoup.find_all()
urllib.requestを使って、外部サイトへアクセスする
URL = "XXXXX" html = urllib.request.urlopen(URL)
取得したhtmlを読み込むが、その際バイナリのため、decode()で文字列に変換したhtmlを得る
result = html.read().decode("utf-8") # print(result)すると文字列なhtmlがでてくる # print(type(result))
BeautifulSoupを使って、取得したhtmlを指定したパーサーによって解析する
soup = BeautifulSoup(html, "html.parser")
任意の要素を取得する
soupに対し、ルート要素のから「.」を利用して要素にアクセスし、値を取得できる
※閉じタグは省略
# ここでは<html><body><h1>にアクセス h1 = soup.html.body.h1 # ここでは<html><body>の最初に出てくる<p>にアクセス p1 = soup.html.body.p # ここでは<html><body>の二番目に出てくる<p>にアクセス p2 = p1.next_sibling.next_sibling
取得した要素のテキスト部分を表示したい場合
print(h1.string) print(p1.string) print(p2.string)
find()を用いて任意のidで要素を取得する
xxx = soup.find(id="xxx")
同様に要素のテキスト部分を表示するには以下
xxx.string
find_all()で複数の要素を取得する
xxx = soup.find_all("xxx")
取得した要素はfor文でループさせる
取得要素になどリンクがある場合
href = xxx.attrs["href"]
とするとhref以下の要素を取得することができる