BeautifulSoup4とは?メソッド、使い方まとめ【Pythonによるウェブスクレイピング】

BeautifulSoup4

BeaurifulSoup4は

Beautiful Soup はHTMLやXMLファイルからデータを取得するPythonのライブラリです。あなたの好きなパーサー(構文解析器)を使って、パースツリー(構文木)の探索、検索、修正を行います。 これはプログラマーの作業時間を大幅に短縮してくれます。

www.crummy.com

日本語訳もある。

基本的な取得イメージの完成形

以下のコードはtarget_urlで指定したサイトのリンク先URLをすべて取得するコード。

import requests
from bs4 import BeautifulSoup

target_url = '***'
r = requests.get(target_url)
soup = BeautifulSoup(r.text, 'lxml')

for a in soup.find_all('a'):
      print(a.get('href'))

インポート

from bs4 import BeautifulSoup

bs4はBeatifulSoupが格納されたパッケージ。こういう呼び方をしているのは、バージョンが変わっても対応しやすいようにするため??とりあえずお作法として覚える。

情報を取得するrequestsパッケージも同時に呼び出す。

import requests

target_url = 'https://www.yahoo.co.jp/'
r = requests.get(target_url) 
soup = BeautifulSoup(r.text, 'lxml')

データを取得するURLを指定し、BeautifulSoupにセットする。
lxmlはパーサー(persor、構文解析器)と呼ばれている。

※lxmlについてこちらのサイトに詳しく説明がある。

requestパッケージについては、別途まとめる。

メソッド

基本操作

soup.string #文字列を取得する

データ取得系

soup.title #titleタグを取得する。
soup.title.string #titleタグで囲まれた文字列を取得する
soup.head #headタグを取得する。
soup.find('a') #aタグをすべて取得する。
soup.find_all('a') #aタグをすべて取得する。
soup.a #1つめのaタグを取得する。
soup.a.get("href") #hrefの値(つまりurl)を取得する
soup.select('a[href^="http://"]') # CSSセレクタ

使用例サンプル

例1)リンク先がYahoo!pickupのをすべて取得する。

soup.find_all(href=re.compile("news.yahoo.co.jp/pickup"))

例2)リンク先の属性指定

soup.find_all("a", class_="link", href="/link")
soup.find_all("a", attrs={"class": "link", "href": "/link"})
soup.find_all(class_="link", href="/link")
soup.find_all(attrs={"class": "link", "href": "/link"})

※class_だけアンダースコアがついているので注意。

例3)正規置換

import re
soup.find_all(re.compile("^b")) #bで始まるタグ
soup.find_all("a", text=re.compile("hello"))

出力系

soup.prettify() #取得した構文を表示する。

参考にした記事:


https://python.civic-apps.com/beautifulsoup4-selector/