Pythonにおけるbs4のインストール方法と使い方を現役エンジニアが解説【初心者向け】

初心者向けにPythonにおけるbs4のインストール方法と使い方について現役エンジニアが解説しています。bs4(beautifulsoup4)とはHTMLパーサライブラリです。bs4をPythonのpipによりインストールし、Webページをスクレイピングする方法を解説しています。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

Pythonにおけるbs4のインストール方法と使い方について、TechAcademyのメンター(現役エンジニア)が実際のコードを使用して、初心者向けに解説します。

Pythonについてそもそもよく分からないという方は、Pythonとは何なのか解説した記事を読むとさらに理解が深まります。

 

なお本記事は、TechAcademyのオンラインブートキャンプ、Python講座の内容をもとに紹介しています。

 

田島悠介

今回は、Pythonに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

Pythonにおけるbs4のインストール方法と使い方について詳しく説明していくね!

大石ゆかり

お願いします!

本記事ではサードパーティ製のHTMLパーサライブラリであるbs4(beautifulsoup4)についての概要とサンプルコードから使い方を紹介していきます。

bs4とは?

bs4とは、Pythonでよく使用されているサードパーティ製のHTMLパーサライブラリです。

特徴的の1つとして、インスランス生成時に使用するパーサライブラリを指定することができる、という点でしょうか。これにより、HTML以外にXMLをパースすることも可能です。

補足:パーサとは、プログラムのソースコードやXML文書など、一定の文法に従って記述された複雑な構造のテキスト文書を解析し、プログラムで扱えるようなデータ構造の集合体に変換するプログラムのこと。

 

bs4のインストール

bs4はPyPIで配布されているため、pipでインストールすることが可能です。

pip install beautifulsoup4

 

[PR] Pythonで挫折しない学習方法を動画で公開中

bs4の使い方

基本的な使い方のフローは以下のようになります。

  1. HTML文字列を用意する
  2. パーサを指定してHTML文字列を元にBeautifulSoupオブジェクトを生成する
  3. BeautifulSoupから必要となるデータを抽出する

 

サンプルコード

from bs4 import BeautifulSoup
html = "<body><h1>python入門</h1><p>pythonの基礎について学習します</p></body>"
soup = BeautifulSoup(html, "html.parser")
print(soup.h1)

 

実行結果

<h1>python入門</h1>

 

解説

1行目ではbs4ライブラリをインポートしています。

2行目ではHTML文字列を用意しています。

3行目ではHTML文字列を元にBeautifulSoupオブジェクトを生成しています。第一引数のHTML_TEXTの部分は取ってきたHTMLをそのまま渡して、第二引数はパーサを指定します。

4行目ではBeautifulSoupオブジェクトからh1のタグを指定してデータを抽出しています。

補足1:BeautifulSoupオブジェクトからのデータ抽出方法は大きく分けて3つあります。(Tagオブジェクトを使用/find_allメソッドを使用/selectメソッドを使用したCSSセレクタ)

サンプルコードではTagオブジェクトについて学習しますが、実務上ではfind_allメソッドの使用でほとんどが事足りると思います。

補足2:html文字列の取得はurllib等でURLを指定してインターネットから取得する事も可能です。

bs4を利用してスクレイピングしてみよう

ここではYahooのヘッドラインニュースを抽出する例をサンプルコードと実行結果をもとに解説していきます。

urllibのインストール

今回のサンプルコードではurllibを使用してHTML文字列を取得するのでurllibをインストールします。urllibはPyPIで配布されているため、pipでインストールすることが可能です

pip install urllib3

 

サンプルコード

import urllib.request
from bs4 import BeautifulSoup

url = 'https://www.yahoo.co.jp/'
ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) '\
'AppleWebKit/537.36 (KHTML, like Gecko) '\
'Chrome/55.0.2883.95 Safari/537.36 '

req = urllib.request.Request(url, headers={'User-Agent': ua})
html = urllib.request.urlopen(req)
soup = BeautifulSoup(html, "html.parser")
topicsindex = soup.find('div', attrs={'class': 'sc-RbTVP hQRqze'})
topics = topicsindex.find_all('li')
for topic in topics:
  print(topic.find('a').contents[0])

 

実行結果

<h1 class="sc-gbzWSY kRWPhR sc-jTzLTM cORcFb">栃木県で震度4 津波心配なし</h1>
<h1 class="sc-gbzWSY kRWPhR sc-jTzLTM cORcFb">医師銃撃 一転して最悪の連絡</h1>
<h1 class="sc-gbzWSY kRWPhR sc-jTzLTM cORcFb">内定辞退率 利用側も行政指導</h1>
<h1 class="sc-gbzWSY kRWPhR sc-jTzLTM cORcFb">福島で白骨遺体 夫婦ら逮捕</h1>
<h1 class="sc-gbzWSY kRWPhR sc-jTzLTM cORcFb">100円おせち 強気の販売予想</h1>
<h1 class="sc-gbzWSY kRWPhR sc-jTzLTM cORcFb">アナ雪2ステマ? Disney否定</h1>
<h1 class="sc-gbzWSY kRWPhR sc-jTzLTM cORcFb">五輪マラソン 7時開始で決定</h1>
<h1 class="sc-gbzWSY kRWPhR sc-jTzLTM cORcFb">酒井法子 会社役員と交際報道</h1>

 

解説

1-2行目では使用するurllib、BeautifulSoupライブラリのインポートしています。3行目ではHTML抽出先のURLを設定しています。

4-7行目ではユーザーエージェントの設定をしています。

8行目ではurllib.request.Request()でユーザーエージェントを偽装してHTML文字列を取得しています。Yahoo! JAPANは、ユーザーエージェント (User agent)によって表示を変えているのでこのような記述となっています。

9行目ではヘッドラインニュースが含まれているclass”sc-RbTVP hQRqze”を指定してデータを抽出しています。
(このクラス名の取得に関する情報はGoogle chromeの検証ツールが便利です。)

10行目では抽出したデータからトピックとなる部分全てを<li>タグを条件として抽出しています。

11-12行目では10行目で取得したトピックのリストから順番に<a>タグを条件に記事のタイトル内容を抽出して表示しています。

抽出結果を表示しているprint(topic.find(‘a’).contents[0])についてはres.text を渡してももちろん動作しますが res.content を渡した方が「文字化け」する可能性を減らせますのでこちらで書く癖をつけましょう。

監修してくれたメンター

菅繕久(すがよしひこ)

現在はフリーランスのエンジニアをしていてプログラミング歴は8年目になります。

普段は Python、FileMaker等を使って様々な業務で活用できるIoTプロダクトRPAツールを作成しています。
開発実績としては、業務自動化ツール(在庫管理・発注・ファイル操作 etc)、電子カルテシステム、ロボット用プログラムなどがあります。
TechAcademyではPythonコースを担当しております。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

 

TechAcademyでは、初心者でも最短4週間で、Pythonを使った人工知能(AI)や機械学習の基礎を習得できる、オンラインブートキャンプを開催しています。

また、現役エンジニアから学べる無料体験も実施しているので、ぜひ参加してみてください。