Pythonでスクレイピングを行い、解析する方法の一つとして「BeautifulSoup」があります。ここでは「BeautifulSoup」の使用方法について解説をしています。
この記事の対象
BeautifulSoupとは
スクレイピングをする上で任意の情報を抽出するライブラリが「BeautifulSoup」です。HTML、XMLから任意の情報を抽出するための解析を行います。ただし、データのダウンロードを行うわけではないのがポイントです。ダウンロードを行う場合は「urllib」を使用します。
BeautifulSoupのダウンロード
「BeautifulSoup」は標準ライブラリではないので、ライブラリをダウンロードする必要があります。PyPIからpipでダウンロードします。
#BeautifulSoupのダウンロード
$ pip3 install beautifulsoup4
BeautifulSoupの基本的な使用方法
要素名・属性(id)での抽出
要素の抽出方法にはいくつか種類があります。以下では「要素名」「属性」で抽出する方法について解析しています。
プログラムの流れ
プログラムの大まかな流れです。
- BeautifulSoup(ライブラリ)のインポート
- パーサーの指定(html.parser)
- 抽出(h1,h2,p)
プログラム
#1---ライブラリのimport
from bs4 import BeautifulSoup
#2---解析内容
analytics = """
<html><body>
<h1>【Python応用】BeautifulSoupを用いた基本的なスクレイピング方法</h1>
<h2>BeautifulSoupとは</h2>
<p>スクレイピングをする上で任意の情報を抽出するライブラリが「BeautifulSoup」です。</p>
</html></body>
"""
#3---パーサーの指定
soup = BeautifulSoup(analytics,'html.parser')
#4---抽出
h1 = soup.html.body.h1
h2 = soup.html.body.h2
p = soup.html.body.p
#4---抽出した文字の出力
print("h1 : ",h1.string)
print("h2 : ",h2.string)
print("p : ",p.string)
上記のプログラムでは、ウェブから情報をスクレイピングしていません。HTMLをプログラム内で記述して、その内容を解析するものとなっています。
2の部分で解析したいHTMLを指定しています。内容としては「h1」「h2」「p」です。3の部分はBeautifulSoup(引数1,引数2)メソッドです。引数1にHTMLを指定、引数2にパーサーを指定しています。4の部分は任意の部分を抽出しています。「h1」「h2」「p」を抽出しています。「soup.html.body.h1」はh1がどこにあるのか指定しています。5の部分は文字を取得しています。
結果
#h1 : 【Python応用】BeautifulSoupを用いた基本的なスクレイピング方法
#h2 : BeautifulSoupとは
#p : スクレイピングをする上で任意の情報を抽出するライブラリが「BeautifulSoup」です。
>>>「BeautifulSoup」におけるidを指定して要素抽出する方法
CSSセレクタでの抽出
抽出方法には、CSSセレクタを指定して抽出する方法もあります。以下ではCSSセレクタを用いた抽出方法を紹介しています。
プログラムの流れ
プログラムの大まかな流れです。
- URLの指定
- パーサーの指定(html.parser)
- selectを用いて抽出(h2)
プログラム
from bs4 import BeautifulSoup
import urllib.request as urreq
#1---URL指定
url = "https://www.hobby-happymylife.com/%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0/python_scraping_beautifulsoup_id/"
ans = urreq.urlopen(url)
#2---パーサー指定
soup = BeautifulSoup(ans,'html.parser')
#3---h2の抽出
all_h2 = soup.select('h2')
for i in range(3):#3つ抽出
cell = all_h2[i].string
print(cell)
上記のプログラムは、Web(本サイト)から情報を取得して解析するものになります。
1の部分では、URLを指定しています。次に2の部分ではパーサーを指定しています。3の部分では「select」を用いて「h2」の抽出をしています。
結果
id属性とは
find()メソッドを用いた要素探索
find_all()メソッドを用いた要素探索
>>>「BeautifulSoup」におけるCSSセレクタを操作する方法
BeautifulSoupの操作
項目 | 内容 |
BeautifulSoupにおけるidでの要素探索 | BeautifulSoupではHTML内のid属性をfind()メソッドを用いて解析することが可能です。ここでは、find()メソッドを用いた解析方法について解説しています。 |
BeautifulSoupとurlopenによるスクレイピング | BeautifulSoupは解析するもので、単体ではスクレイピングが成立しません。そこで、ウェブサイトから情報を抽出するにはurlopenを用いてサイトにアクセスする必要があります。ここでは、urlopenとBeautifulSoupを用いたスクレイピングについて解説しています。 |
BeautifulSoupにおけるCSSセレクタの操作 | BeautifulSoupを用いた解析において、CSSセレクタを用いた探索方法があります。「soup.select_one()」などを用いることで要素を抽出できます。ここでは、「soup.select_one()」を用いて解説しています。 |