NnmnLog

Python3でBeautifulSoup4を使ってHTMLを解析する準備をする

作成: 2021-06-27
更新: 2021-06-27

Python3とBeautifulSoup4を使って、HTMLを解析する準備をした時のメモです。

インストール方法と簡単な使い方を調べました。

環境

環境としては、以下でWSL上のUbuntu 20.04で動かします。

Pythonはubuntuに最初から入っているものを使いました。

  • Windows 10 home
  • WSL: Ubuntu 20.04
  • Python 3.8.5
  • pip 20.0.2

インストール

pipを使ってインストールします。

$ pip install beautifulsoup4

使ってみる

requestsを使って取得したページの内容を解析し、H2タグを抽出してみます。

# file: get_nnnamani-com.py
import bs4
import requests

soup = bs4.BeautifulSoup(requests.get(
    'https://nnnamani.com').text, 'html.parser')

for h2 in soup.find_all('h2'):
    print(h2.text)

以下のような結果になります。

$ python3 get_nnnamani-com.py 
Rubyでの繰り返し処理
Ubuntu Desktop 20.04 LTSでOS起動時にsshdが起動してこない
Vagrantで自分用のboxを作成して、起動を高速化したい
Bashでのファイルの存在チェック方法
Windows 10でRubyの開発環境を用意したい
Rustでファイルを開く
Rustでランダム文字列を生成するCLIツールを作った
Rustでdevelop環境のみcrateを読み込む方法
Rustでユニットテストを書く方法を調べた
Rustをインストールしてプロジェクトを作ってみる
Ansible使ってみた
Ruby on RailsでPostgresを使う
scrcpyでPCからUSB経由でAndroidスマホを操作する
lsの代わりに、exaを使ってみる
JuliaでJupyter Notebook(JupyterLab)をセットアップした
Juliaをさわってみた
Ruby on Railsでラジオボタンを表示する方法
Skaffoldを使ってみる
MinikubeでKubernetesのローカル環境を構築する

スクレイピングをする場合、一度ダウンロードしたHTMLに対して解析を行いたい場合があります。

例えば、以下のようにhtmlをダウンロードしてきた場合を考えます。

$ curl 'https://nnnamani.com' > nnnamani.com.html
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 10029    0 10029    0     0   8930      0 --:--:--  0:00:01 --:--:--  8930

上記のコマンドでとってきた、ローカルのファイルnnnamani.com.htmlをBeautifulSoupに渡すには、以下のようになります。

openで開いたファイルを渡すだけです。

# file: get_nnnamani-com_local.py
import bs4

soup = bs4.BeautifulSoup(open('./nnnamani.com.html'), 'html.parser')

for h2 in soup.find_all('h2'):
    print(h2.text)

実行結果は以下のようになります。

$ python3 get_nnnamani-com_local.py 
Rubyでの繰り返し処理
Ubuntu Desktop 20.04 LTSでOS起動時にsshdが起動してこない
Vagrantで自分用のboxを作成して、起動を高速化したい
Bashでのファイルの存在チェック方法

.... 結果はrequestsと同じなので、省略 ....

まとめ

BeautifulSoup4を入れて動かしてみました。

細かい使い方はこれからですが、なんとなくの使い方がわかりました。

DOMを取得しての処理も使いやすい印象なので、これからいろいろ試してみたいです。