dj.htmlを作ります。djの世界ランキング。ulli要素のみ。
<ul id="dj"> <li id="mg">Martin Carrix</li> <li id="dv">Dimitri Vegas & Like Mike</li> <li id="ab">Armin van Buuren</li> <li id="hd">Hardwell</li> <li id="tj">Tjesto</li> <li id="cs">The Chainsmokers</li> <li id="dg">David Guetta</li> <li id="aj">Afrojack</li> <li id="sa">Steve Aoki</li> <li id="mm">Marshmello</li> </ul>
続いて、python
from bs4 import BeautifulSoup fp = open("dj.html", encoding="utf-8") soup = BeautifulSoup(fp, "html.parser") sel = lambda q : print(soup.select_one(q).string) sel("#mm") sel("li#sa") sel("ul > li#aj") sel("#dj #dg") sel("#dj > #cs") sel("ul#dj > li#tj") sel("li[id='hd']") sel("li:nth-of-type(2)") print(soup.select("li")[1].string) print(soup.find_all("li")[0].string)
[vagrant@localhost python]$ python3 app.py
Marshmello
Steve Aoki
Afrojack
David Guetta
The Chainsmokers
Tjesto
Hardwell
Dimitri Vegas & Like Mike
Dimitri Vegas & Like Mike
Martin Carrix
sel(“li:nth-of-type(2)”)と、print(soup.select(“li”)[1].string)の値が同じなのがわかります。配列だと、普通0から始まりますが、nth-of-type(n)は1からのようですね。
>ラムダ式(lambda)を用いて名前のない関数を書けます。名前のない関数を 無名関数 と呼びます。名前が必要ない小さな関数を作るための機能です。
>ラムダ式は以下のように書きます。引数と処理をコロン(:)で区切って書きます。引数が複数ある場合は、通常の関数と同じように感まで区切ります。
lambda q :が無名関数です。
sel = lambda a : print(soup.select_one(a).string) と書いても、同じように動きます。