PythonでBeautifulSoupライブラリを使う方法

Home - python - PythonでBeautifulSoupライブラリを使う方法

投稿:2022年3月19日

更新:2022年3月19日

こんにちわ!はじめまして、Web系フリーランスの泉原です。今回はPythonのBeautifulSoupについて解説したいと思います。

BeautifulSoupはPythonのライブラリで、スクレイピングをするときに使用するライブラリになります。具体的にはHTMLの情報を取得することが出来ます。スクレイピングをするときはBeautifulSoupとrequestsを組み合わせます。requestsについては、以下の記事で解説しているので、そちらを参照して下さい。

前回のRequestsライブラリの続きから解説していきます。仮想環境やライブラリのインストールが出来てない方は、上のリンクから構築して下さい。

前回までのおさらい

pipでRequestsをインストールして、HTTP通信を使って、ブログの情報を取得しました。

import requests
from bs4 import BeautifulSoup

url = 'https://haru-haru0.com/'
res = requests.get(url)
print(res.text)

今回はBeautifulSoupを使って、HTMLの構造を取得して、必要な情報を加工していきます。

BeautifulSoupをインストールする

ターミナルを開いて、BeautifulSoupをインストールします。

pip install beautifulsoup4

インストール出来たことを確認

pip show beautifulsoup4

バージョンやインストール場所が表示されると、正しくインストールされています。

よく使う文法の紹介

よく使う文法を2つ紹介していきます。必要な所だけ学習して、効率良く学習していきましょう!

紹介する文法

  1. find()
  2. select()

1.find()の使い方

find()最初の要素のみを取り出す時に使います。実際にブログから情報を抽出したいと思います。

まずRequestsで取得した情報をBeautifulSoupで解析したいと思います。

soup = BeautifulSoup(res.text, 'html.parser')
print(soup)

resのテキスト情報をBeautifulSoupのhtml.parserを使って、HTML情報を解析します。最後にprintで出力しています。

情報が正しく取得出来ているので、findtitleを取得したいと思います。

title = soup.find('title')
print(title)

取得出来ました。

find(’取得したいセレクト名’)とすることで情報を取得出来ます。find最初の要素のみを取得出来ます。

全ての要素を取得したい場合はfind_all()を使うと、情報を取得出来ます。

div = soup.find_all('div')
print(div)

2.select()の使い方

find()find_all()との違いは引数に指定する値です。どっちを使用しても大丈夫ですが、HTML,CSSのコーディングが慣れている方はselectの方が分かりやすいかもしれません。引数にCSSセレクタの値を渡すからです。

selectを使って、ブログタイトルを取得します。

title = soup.select('.blog_title')
print(title)

クラス名がblog_titleの情報を取得しています。select(’.クラス名’)とすることで取得出来ます。

aタグのhref属性をループで取得する

for a in soup.select("a"):
  print(a.get("href"))

取得出来ました。

soup.select(’a’)の情報をaに代入して、getメソッドを使って、辞書型のキーをhrefに指定し値を取得しました。

簡単に情報を取得出来るので、便利ですね!

基本的なこれらのメソッドを使うことでスクレイピングをすることが出来ます。

Writer info

プロフィール写真

泉原 遥輝 | Haruki Izumihara

フリーランスのエンジニアです。Web制作や、LP、Pythonを使った自動化ツールなどをメインにお仕事をしています。お気軽にお問い合わせください!