NETWORK ENGINEER BLOG

Tips and Reviews for Engineers

Python の Beautiful Soup モジュールについて

Beautiful Soup モジュールとは

HTML や XML ファイルからデータを取得し、解析するライブラリです。
主に requests モジュールと組み合わせて、Web スクレイピングに使用されます。

実行例

コード
import requests
from bs4 import BeautifulSoup
res = requests.get('https://news.yahoo.co.jp/') 
soup = BeautifulSoup(res.text,'lxml')
for a in soup.find_all('a'):
    print(a.get('href'))
出力結果
https://www.yahoo.co.jp/
https://www.yahoo-help.jp/app/home/service/news/
https://news.yahoo.co.jp/
…(中略)…

解説

基本的な使い方

コードの記述方法は、以下のとおりです。

BeautifulSoup(解析対象の HTML/XML, 利用するパーサー)

1 つ目の引数には、解析対象の HTML/XML を指定し、2 つ目の引数は解析に利用するパーサー(読み取り方式)を指定します。

事前準備

必要に応じて pip をインストールします。

> sudo zypper install python3-pip

beautifulsoup モジュールをインストールします。

> pip3 install beautifulsoup4

パーサーには、html.parser や lxml があり、標準では html.parser が使用されます。
lxml は html.parser よりも高速に処理ができますが、外部依存関係です。
lxml ライブラリを使用する場合は、pip を使用してインストールする必要があります。

pip install lxml
Web ページの全 HTML 文を表示

requests モジュールを使って Web ページをダウンロードし、レスポンスの text 属性を BeautifulSoup に渡します。

import requests
from bs4 import BeautifulSoup
res = requests.get('https://news.yahoo.co.jp//') 
soup = BeautifulSoup(res.text,'lxml')
print(soup)

応用的な使い方

Web ページのリンク情報のみ表示

必要な情報を絞ることも可能です。
例えば、for 文で、取得した内容(soup 変数に格納された内容)から 全ての a タグを抽出し、リンク 先 URL(href 属性)を表示する場合は以下のようになります。

import requests
from bs4 import BeautifulSoup
res = requests.get('https://automatetheboringstuff.com/files/rj.txt') 
soup = BeautifulSoup(res.text,'lxml')
for a in soup.find_all('a'):
    print(a.get('href'))

参考書籍

以上