Pythonで始めるWebスクレイピング:BeautifulSoupを使ったデータ抽出の基本

スポンサーリンク

PythonでWebスクレイピングをおこなう方法

Webスクレイピングと聞くと、なにか意味をそのまま解釈してしまい、webを掘るというイメージが湧いてしまうかもしれません。しかし実際はスクレイピングとは「情報を取得する」ことをいいます。この記事はスクレイピングの書籍を一通り読み進め書いているもので、もしかすると想像していた内容と違うということがあるかもしれません。私自身もまだ完全に理解していない部分があります。

BeautifulSoupモジュールのインストール方法

BeautifulSoupモジュールをインストールするには、次のコマンドをコマンドプロンプトに入力します↓

pip install beautifulsoup4

「4」の部分はバージョンです将来的にはこの数字が変わっている可能性もあります。一応以下のサイトでもインストールコマンドは確認できます。

beautifulsoup4 · PyPI

BeautiflSoup使い方

BeautifulSoup()関数は、HTMLファイルもしくはWebページのURLを渡すと、Beautifulオブジェクトを生成します。

BeautiflSoup()関数の使い方
  • HTMLファイルの場合は、open()関数を使って開きます。
  • URLの場合は、requests.get()関数を使って取得します。
  • それをBeautifulSoup()の引数として渡します。

select()関数の使い方

Beautifulオブジェクトに対してselect()関数を用いることで、Webページから任意の要素を取得できます。

select()関数は要素を含むリスト(リスト型オブジェクト)を返します。getText()関数にテキストコンテンツを取得したいHTMLタグオブジェクトを渡すと、そのタグの文字列を取得できます。 またattrsを使うことでhtmlタグの属性を取得することができます。

BeautifulSoupのselect()関数とその他よく使う関数
  • select()関数は要素を含むリスト(リスト型オブジェクト)を返します。
  • getText()関数にテキストコンテンツを取得したいHTMLタグオブジェクトを渡すと、そのタグの文字列を取得できます。
  • attrsを使うとタグの全ての属性を辞書として所持しており、例えばattrs.get(‘href’)とすることでhref属性が取得できる
スポンサーリンク

実際のコード例

WEBページをBeautifulSoup()関数の引数に渡す場合

import requests, bs4
res = requests.get('http://nostarch.com')
res.raise_for_status()
example_soup = bs4.BeautifulSoup(res.text, 'html.parser')
elems = example_soup.select('p')

hrmlファイルをBeautifulSoup()関数の引数に渡す場合

import bs4
example_file = open('example.html')
example_soup = bs4.BeautifulSoup(example_file, 'html.parser')
elems = example_soup.select('p')

for文を使って要素のテキストを取得する場合

for elem in elems:
    print(elem.getText())

attrsを使って属性を取得する例

import bs4
soup = bs4.BeautifulSoup(html_doc, 'html.parser')
elem = soup.select_one('a')
attrs_dict = a_tag.attrs

# href属性の値を取得
href_value = elem.attrs.get('href')
print(href_value)  # 出力結果: https://www.example.com

# target属性の値を取得
target_value = elem.attrs.get('target')
print(target_value)  # 出力結果: _blank

まとめ

WebスクレイピングはWebページから必要な情報を取得するための手法です。プログラムが得意でなくても、少しのコツを覚えるだけで活用できる可能性があります。スクレイピングという言葉に怯える必要はありません。ただしhtmlの基礎知識が必要になります。

コメント

タイトルとURLをコピーしました