icon
icon

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

アジマッチ有限会社代表取締役社長。書籍化歓迎。対応業務:PHP(Laravel)、機械学習、Vue.js、LAMP・AWS、越境EC、CTO、エンジニア採用、CTO、経営者の不安解決コンサルティング。

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

Pythonでbs4を利用すると、HTMLファイルやXMLファイルからデータを抽出することができます。

実務でもbs4を利用した自動化処理を行いますので、ぜひ学習してみてください。

目次

1時間でできる無料体験!

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

 

田島悠介

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

大石ゆかり

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

田島悠介

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

大石ゆかり

お願いします!

 

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

 

bs4とは?

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

bs4では、インスタンス生成時に使用するパーサライブラリを指定でき、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オブジェクトを生成しています。

第1引数のHTML_TEXTの部分は取ってきたHTMLをそのまま渡して、第2引数はパーサを指定します。

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

BeautifulSoupオブジェクトからのデータ抽出方法は大きく分けて3つあります。

  1. Tagオブジェクトを使用
  2. find_allメソッドを使用
  3. selectメソッドを使用したCSSセレクタ

今回は、Tagオブジェクトについて学習しますが、実務上ではfind_allメソッドの使用でほとんど事足ります。

また、HTML文字列の取得はurllibなどでURLを指定して、インターネットから取得する事も可能です。

 

コラム

コスパとタイパ、両方結果的に良くなる良くなる学び方とは?

「スクールは高いし時間も縛られて効率が悪い」と考える方は多いと思います。
もちろん、時間も費用もかかることは間違いありません。
ただ 結果的に無駄な学びにお金も時間もかける方がリスクが高いという考えもあります。

コスパ・タイパ最適化の参考として、 テックアカデミー卒業生がスクールを選んだ理由 をご紹介します。

  • ・困ったときに、質問や相談できる相手がいるため挫折しなかった
  • ・プロとして必要なスキルのみを深く学べたので無駄がなかった
  • ・副業案件の提供と納品までのサポートがあったので目的を達成できた

安価・短期間で広く浅く学んでも意味がありません。 本当に自分の目的が達成できるか、それが重要です。
自分にどのスキルや学び方が合っているか、どんな学習方法かなど、お気軽に 無料相談 に参加してみませんか?

カウンセラー・現役のプロへ、何でも気軽に無料相談可能。 30分か60分お好きな時間が選べて、かつ3回まで すべて無料で ご利用できます。
無理な勧誘は一切ない ので、お気軽にご参加ください。

今なら相談した方限定の割引・参加特典付き! 無料相談はこちら

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のモジュールをインストールする方法も参考にしてみてください。

大石ゆかり

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

田島悠介

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

大石ゆかり

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

 

1時間でできる無料体験!

Pythonを学習中の方へ

これで解説は終了です、お疲れさまでした。

  • つまずかず「効率的に」学びたい
  • 副業や転職後の「現場で使える」知識やスキルを身につけたい

プログラミングを学習していて、このように思ったことはありませんか?

テックアカデミーのPythonコースでは、第一線で活躍する「プロのエンジニア」が教えているので、効率的に実践的なスキルを完全オンラインでしっかり習得できます。

合格率10%の選考を通過した、選ばれたエンジニアの手厚いサポートを受けながら、人工知能(AI)や機械学習の基礎を学べます。

まずは一度、無料体験で学習の悩みや今後のキャリアについて話してみて、「現役エンジニアから教わること」を実感してみてください。

時間がない方、深く知ってから体験してみたい方は、今スグ見られる説明動画から先に視聴することをおすすめします!

初心者・未経験でもできる。まずはテックアカデミーに相談しよう

プログラミングを独学で学習していて、このように感じた経験はないでしょうか?

  • ・調べてもほしい情報が見つからない
  • ・独学のスキルが実際の業務で通用するのか不安
  • ・目標への学習プランがわからず、迷子になりそう

テックアカデミーでは、このような 学習に不安を抱えている方へ、マンツーマンで相談できる機会を無料で提供 しています。
30分間、オンラインでどんなことでも質問し放題です。

「受けてよかった」と感じていただけるよう カウンセラーやエンジニア・デザイナー があなたの相談に真摯に向き合います。

「自分に合っているか診断してほしい」
「漠然としているが話を聞いてみたい」

こんなささいな悩みでも大丈夫です。

無理な勧誘は一切ありません ので、まずはお気軽にご参加ください。
※体験用のカリキュラムも無料で配布いたします。(1週間限定)

今なら参加者限定の割引特典付き! 無料相談を予約する