学習内容
- CSSセレクターの記述法
- BeautifulSoupによるスクレイピング
CSSセレクターの記述法
以下に10通りのCSSセレクターの記述法を示します。どのCSSセクターもcontinents.html
からEurasia
の要素を取り出します。
<ul id="continents">
<li id="au">Australia</li>
<li id="na">NorthAmerica</li>
<li id="sa">SouthAmerica</li>
<li id="ea">Eurasia</li>
<li id="af">Africa</li>
</ul>
from bs4 import BeautifulSoup
fp = open("continents.html", encoding="utf-8")
soup = BeautifulSoup(fp, 'html.parser')
sel = lambda q: print(soup.select_one(q).string)
sel("#ea") # (1)
sel("li#ea") # (2)
sel("ul > li#ea") # (3)
sel("#continents #ea") # (4)
sel("#continents > #ea") # (5)
sel("ul#continents >li#ea") # (6)
sel("li[id='ea']") # (7)
sel("li:nth-of-type(4)") # (8)
print(soup.select("li")[3].string) # (9)
print(soup.find_all("li")[3].string) # (10)
(1) id属性がea
の要素を取り出す
(2) <li>
タグがついていて,id属性がea
の要素を取り出す
(3) (2)を上層の<ul>
タグから指定して取り出す
(4) id属性がcontinents
の要素の下の階層にある、id属性がea
の子要素を取り出す
(5) id属性がcontinents
の要素の直下の階層にある、id属性がea
の子要素を取り出す
(6) id属性がcontinents
の<ul>
タグ、その直下にあるid属性がea
の<li>
タグの要素を取り出す
(7) id属性がea
の<li>
タグの要素を取り出す
(8) 4つめの<li>
タグの要素を取り出す
(9) select()
を利用して<li>
タグを取り出し、その[3]
の要素を取得(0から数えて3、つまり4つ目)
(10) find_all()
を利用して<li>
タグを取り出し、その[3]
の要素を取得(0から数えて3、つまり4つ目)
実行結果
Eurasia
Eurasia
Eurasia
Eurasia
Eurasia
Eurasia
Eurasia
Eurasia
Eurasia
Eurasia
BeautifulSoupによるスクレイピング
スクレイピングの際に用いる関数についてまとめておきます。
-
find()
メソッド、find_all()
メソッド
任意の属性を指定して要素を取り出す。find()
メソッドは一つの要素、find_all()
メソッドは複数の要素を一気に取得することができる。
使用例
title = soup.find(id="title") # id属性がtitleの要素を取得する
linls = soup.find_all("a") # <a>タグがついた要素を全て取得する
-
select()
メソッド、select_all()
メソッド
引数によってセレクターを指定し、要素を取得する。select()
メソッドは一つの要素、select_all()
メソッドは複数の要素を取得できる。使用例は上述のsel-continents.py
の通り。
まとめ
スクレイピングのやり方については理解できたが、pythonの文法で理解がストップすることが多々あるので、python文法の理解という根底にある目的を忘れずにしっかり確認しながら進めていきたい。