Pythonにおけるbs4のインストール方法と使い方を現役エンジニアが解説【初心者向け】
初心者向けにPythonにおけるbs4のインストール方法と使い方について現役エンジニアが解説しています。bs4(beautifulsoup4)とはHTMLパーサライブラリです。bs4をPythonのpipによりインストールし、Webページをスクレイピングする方法を解説しています。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
監修してくれたメンター
nakamoto
Pythonにおけるbs4のインストール方法と使い方について、テックアカデミーのメンター(現役エンジニア)が実際のコードを使用して初心者向けに解説します。
Pythonでbs4を利用すると、HTMLファイルやXMLファイルからデータを抽出することができます。
実務でもbs4を利用した自動化処理を行いますので、ぜひ学習してみてください。
目次
そもそもPythonについてよく分からないという方は、Pythonとは何なのか解説した記事を読むとさらに理解が深まります。
今回は、Pythonに関する内容だね!
どういう内容でしょうか?
Pythonにおけるbs4のインストール方法と使い方について詳しく説明していくね!
お願いします!
本記事では、サードパーティ製のHTMLパーサライブラリであるbs4(beautifulsoup4)についての概要と、サンプルコードから使い方を紹介していきます。
bs4とは?
bs4とは、Pythonでよく使用されているサードパーティ製のHTMLパーサライブラリです。
bs4では、インスタンス生成時に使用するパーサライブラリを指定でき、XMLをパースすることが可能です。
パーサとは、プログラムのソースコードやXML文書など、一定の文法に従って記述された複雑な構造のテキスト文書を解析し、プログラムで扱えるようなデータ構造の集合体に変換するプログラムのことを意味します。
パースとは、パーサプログラムで実際に解析変換する処理を意味します。
bs4のインストール
bs4はPyPIで配布されているため、pipでインストールすることが可能です。
pip install beautifulsoup4
bs4の使い方
基本的な使い方は以下の通りです。
- HTML文字列を用意する
- パーサを指定してHTML文字列を元にBeautifulSoupオブジェクトを生成する
- 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オブジェクトを生成しています。
第1引数のHTML_TEXTの部分は取ってきたHTMLをそのまま渡して、第2引数はパーサを指定します。
4行目ではBeautifulSoupオブジェクトからh1のタグを指定してデータを抽出しています。
BeautifulSoupオブジェクトからのデータ抽出方法は大きく分けて3つあります。
- Tagオブジェクトを使用
- find_allメソッドを使用
- selectメソッドを使用したCSSセレクタ
今回は、Tagオブジェクトについて学習しますが、実務上ではfind_allメソッドの使用でほとんど事足ります。
また、HTML文字列の取得はurllibなどでURLを指定して、インターネットから取得する事も可能です。
bs4を利用してスクレイピングしてみよう
ここではYahooのヘッドラインニュースを抽出する例を、サンプルコードと実行結果をもとに解説していきます。
urllibのインストール
今回のサンプルコードではurllibを使用してHTML文字列を取得するので、urllibをインストールします。
urllibはPyPIで配布されているため、pipでインストールすることが可能です。
pip install urllib3
サンプルコード
import urllib.request
from bs4 import BeautifulSoup
url = 'https://techacademy.jp/magazine/'
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': 'moe-banner-title'})topics = topicsindex.find_all('li')
for topic in topics:
print(topic.find('a').contents[0])
実行結果
<p class="moe-banner-title"> 一度身につけておけば、武器になる </p> <p class="moe-banner-title"> 指一本で世の中を変えられる、未来を創れる </p> <p class="moe-banner-title"> パソコン1台で、10億人の人生を変えられるかもしれない </p>
解説
1-2行目では使用するurllib、BeautifulSoupライブラリのインポートしています。
3行目ではHTML抽出先のURLを設定しています。
4-7行目ではユーザーエージェントの設定をしています。
8行目ではurllib.request.Request()でユーザーエージェントを偽装してHTML文字列を取得しています。
https://techacademy.jp/magazine/は、ユーザーエージェント (User agent)によって表示を変えているのでこのような記述になっています。
9行目ではMASTER OF ENGINEERコンテンツにある、class”moe-banner-title”を指定してデータを抽出しています。
10行目では抽出したデータからトピックとなる部分すべてを抽出しています。
11-12行目では10行目で取得したトピックのリストから順番に、<a>タグを条件に記事のタイトル内容を抽出して表示しています。
抽出結果を表示しているprint(topic.find(‘a’).contents[0])についてはres.text を渡してももちろん動作します。
しかし、 res.content を渡したほうが「文字化け」する可能性を減らせておすすめです。
まとめ
bs4は、pipコマンドを利用してインストールしました。
bs4を利用するためには、HTMLの要素を指定する必要がありました。
pipを使ってPythonのモジュールをインストールする方法も参考にしてみてください。
内容が分かりやすくて良かったです!
ゆかりちゃんも分からないことがあったら質問してね!
分かりました。ありがとうございます!
Pythonを学習中の方へ
これで解説は終了です、お疲れさまでした。
- つまずかず「効率的に」学びたい
- 副業や転職後の「現場で使える」知識やスキルを身につけたい
プログラミングを学習していて、このように思ったことはありませんか?
テックアカデミーのPythonコースでは、第一線で活躍する「プロのエンジニア」が教えているので、効率的に実践的なスキルを完全オンラインでしっかり習得できます。
合格率10%の選考を通過した、選ばれたエンジニアの手厚いサポートを受けながら、人工知能(AI)や機械学習の基礎を学べます。
まずは一度、無料体験で学習の悩みや今後のキャリアについて話してみて、「現役エンジニアから教わること」を実感してみてください。
時間がない方、深く知ってから体験してみたい方は、今スグ見られる説明動画から先に視聴することをおすすめします!