【Python応用】BeautifulSoupにおけるCSSセレクタの操作

Python

ここでは、「BeautifulSoup」を用いたCSSセレクタを指定してスクレイピングする方法について解説しています。

この記事の対象

  • CSSセレクタについて知りたい方
  • select()メソッドについて知りたい方
  • select_one()メソッドについて知りたい方
スポンサーリンク
スポンサーリンク

CSSセレクタとは

CSSセレクタとはHTMLのスタイルの装飾を行うセレクタです。例えば以下のようなものです。

#anc01 > div:nth-child(2) > div > div.stInfo > div.stContents > h2

CSSセレクタのメソッド

項目内容
soup.select_one(CSSセレクタ)1つの要素を取り出すメソッド
soup.select(CSSセレクタ)複数の要素を取り出し、リスト型で返すメソッド

「soup.select(CSSセレクタ)」は該当する全ての要素をリスト型で返すので、取り出すときはfor構文と合わせることで抽出する場合が多いです。

以下にCSSセレクタについてまとめています。ご参照下さい。

要素を抽出する方法にはfind()メソッドを用いる方法もあります。詳しい内容は以下をご参照下さい。

>>>BeautifulSoupで複数要素をid属性で探索する方法

CSSセレクタを用いた使用例

soup.select_one() ⇒ 該当する1つを抽出

以下のプログラムは「honto電子書籍ストア」のランキング1位だけをスクレイピングする内容となっています。

from bs4 import BeautifulSoup
import urllib.request as urreq
#1---siteを指定
url ="https://honto.jp/ranking/gr/bestseller_1101_1201_011.html"
ans = urreq.urlopen(url)

#2---HTMLの解析
soup = BeautifulSoup(ans,"html.parser")
#3---CSSセレクタでの要素取り出し
soup_word = soup.select_one(#anc01 > div:nth-child(2) > div > div.stInfo > div.stContents > h2).string
print(soup_word)

以下、解説です。

#1---siteを指定
url ="https://honto.jp/ranking/gr/bestseller_1101_1201_011.html"
ans = urreq.urlopen(url)

1の部分でURLを指定しています。次にurllibでURLを開いています。

#2---HTMLの解析
soup = BeautifulSoup(ans,"html.parser")

2の部分でHTMLの解析を行っています。引数にはURL情報とHTMLを解析する「html.parser」を指定しています。

#3---要素抽出
soup_word = soup.select_one(#anc01 > div:nth-child(2) > div > div.stInfo > div.stContents > h2).string
print(soup_word)

3の部分で「soup.select_one(“”).string」でh2の文字列を抽出しています。最後に文字列を出力しています。

【結果】

省略(スクレイピング時によって変わります。試してみて下さい。)

soup.select() ⇒ 該当する全てを抽出

下記のプログラムは、Web(本サイト)から情報を取得して解析するものになります。

from bs4 import BeautifulSoup
import urllib.request as urreq

#1---URL指定
url = "https://www.hobby-happymylife.com/%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0/python_scraping_beautifulsoup_id/"
ans = urreq.urlopen(url)
#2---パーサー指定
soup = BeautifulSoup(ans,'html.parser')
#3---h2の抽出
all_h2 = soup.select('h2')
for i in range(3):#3つ抽出
    cell = all_h2[i].string
    print(cell)

以下、解析です。

#1---URL指定
url = "https://www.hobby-happymylife.com/%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0/python_scraping_beautifulsoup_id/"
ans = urreq.urlopen(url)

1の部分では、URLを指定しています。次にurllibでURLを開いています。

#2---パーサー指定
soup = BeautifulSoup(ans,'html.parser')

次に2の部分ではパーサーを指定して、HTML解析を行っています。

#3---h2の抽出
all_h2 = soup.select('h2')
for i in range(3):#3つ抽出
    cell = all_h2[i].string
    print(cell)

3の部分では「select」を用いて「h2」に該当する全てを抽出をしています。次にfor構文で3つだけ抽出しています。

【結果】

id属性とは
find()メソッドを用いた要素探索
find_all()メソッドを用いた要素探索

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