レッスン1 / 3問目

『cssセレクタ』

このレッスンでは、CSSセレクタについて学習していきましょう。

本レッスンは前提知識として、HTML、CSSの知識が必要となります。HTMLのタグと基本的な書き方、classやidの指定、また、cssがどのようなものか、などが理解できていれば問題ありません。

CSSセレクタとは

BeautifulSoupでは、HTMLのclassやidを指定し、要素を取り出すことができます。

例えば、以下のようなHTMLの場合、idを指定したり、classを指定することで要素を取り出すことができます。

  1. <h1 id="title">スクレイピング</h1>
  2. <p class="text">こんにちは</p>

CSSセレクタの使い方

BeautifulSoupでcssのセレクタを指定するには、 select_one() select() メソッドを使用します。

メソッド説明
soup.select_one("セレクタ")セレクタで指定した要素を一つ取り出す
soup.select("セレクタ")セレクタで指定した要素を全て取り出す(リストで取得)

select_one() select() それぞれの引数にid名やclass名を指定することでその要素を取り出すことができます。

具体例

では、具体例を見ていきましょう。

以下の例では、htmlから、それぞれidとクラスで要素を指定し、出力しています。

idを指定するにはid名の前に「 # 」を記述し、classを指定するにはクラス名の前に「 . 」を記述します。

  1. from bs4 import BeautifulSoup
  2. html ="""
  3. <h1 id="title">スクレイピング</h1>
  4. <p class="text">こんにちは</p>
  5. """
  6. soup = BeautifulSoup(html, "html.parser")
  7. print(soup.select_one("#title"))    # idを指定
  8. print(soup.select_one(".text"))    # classを指定
<h1 id="title">スクレイピング</h1>    # idで取得 <p class="text">こんにちは</p>    # classで取得

id, classを指定し、それぞれの要素を取得することができました。


次は、 soup.select("セレクタ") を使用して、複数の要素をリストで取得します。
以下の例ではクラス .text の要素を全て取得しています。

  1. from bs4 import BeautifulSoup
  2. html ="""
  3. <p class="text">こんにちは</p>
  4. <p class="text">おはようございます</p>
  5. """
  6. soup = BeautifulSoup(html, "html.parser")
  7. print(soup.select(".text"))    # クラスを全て指定
[<p class="text">こんにちは</p>, <p class="text">おはようございます</p>]

textクラスの要素をリストで取得することができました。

では、このレッスンは以上となります。

Lesson1

BeautifulSoupをインポートし、変数htmlからsoupオブジェクトを生成してください。

Lesson2

idを指定して、下記内容を出力してください。

<h1 id="title">スクレイピングサンプル</h1>

Lesson2

classを指定して、下記内容を出力してください。

[<p class="text">Hello</p>, <p class="text">Scraping</p>]

Last updated:2019/12/23

<h1 id="title">スクレイピングサンプル</h1>
[<p class="text">Hello</p>, <p class="text">Scraping</p>]
  1. html = """
  2. <h1 id="title">スクレイピングサンプル</h1>
  3. <p class="text">Hello</p>
  4. <p class="text">Scraping</p>
  5. """
  6. # 1. htmlからsoupオブジェクトを生成してください
  7. from bs4 import BeautifulSoup
  8. soup = BeautifulSoup(html, "html.parser")
  9. # 2. 指定した値を出力してください
  10. print(soup.select_one("#title"))
  11. # 3. 指定した値を出力してください
  12. print(soup.select(".text"))
main.py
設定
g
n
i
d
a
o
L