Quantcast
Channel: CSSタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8732

学習記録(3日目)#CSSセレクターの記述法#BeautifulSoupによるスクレイピング

$
0
0

学習内容

  • CSSセレクターの記述法
  • BeautifulSoupによるスクレイピング

CSSセレクターの記述法

以下に10通りのCSSセレクターの記述法を示します。どのCSSセクターもcontinents.htmlからEurasiaの要素を取り出します。

continents.html
<ulid="continents"><liid="au">Australia</li><liid="na">NorthAmerica</li><liid="sa">SouthAmerica</li><liid="ea">Eurasia</li><liid="af">Africa</li></ul>
sel-continents.py
frombs4importBeautifulSoupfp=open("continents.html",encoding="utf-8")soup=BeautifulSoup(fp,'html.parser')sel=lambdaq: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文法の理解という根底にある目的を忘れずにしっかり確認しながら進めていきたい。


Viewing all articles
Browse latest Browse all 8732

Latest Images

Trending Articles

<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>