まず、スマホランキングのhtmlをつくります。しかし、huawei売れてるな~ 周りでも増えてきました。
<html><body> <div id="smartphone" role="ranking"> <h1>セールス・人気ランキング</h1> <ul id="sales"> <li class="docomo" data-lo="ios">iPhone 8 64GB(NTT docomo)</li> <li class="au" data-lo="ios">iPhone 8 64GB(au)</li> <li class="softbank" data-lo="ios">iPhone 8 64GB(SoftBank)</li> <li class="free" data-lo="android">Huawei Technologies P20 liteANE-LX2J</li> <li class="free" data-lo="android">Huawei Technologies nova lite 2nova lite 2</li> </ul> <ul id="popular"> <li class="free" data-lo="android">HUAWEI HUAWEI P20 lite</li> <li class="docomo" data-lo="android">Xperia XZ2 Premium SO-04K</li> <li class="docomo" data-lo="android">HUAWEI HUAWEI P20 Pro HW-01K</li> <li class="free" data-lo="android">HUAWEI HUAWEI P20</li> <li class="free" data-lo="android">ASUS ZenFone 4 Max</li> </ul> </div> </body></html>
続いてpython
id、classだけでなくdata-loを使っています。
from bs4 import BeautifulSoup fp = open("smartphone.html", encoding="utf-8") soup = BeautifulSoup(fp, "html.parser") print(soup.select_one("li:nth-of-type(8)").string) print(soup.select_one("#popular > li:nth-of-type(3)").string) print(soup.select("#sales > li[data-lo='android']")[1].string) print(soup.select("#popular > li.docomo")[0].string)
なるほど。
[vagrant@localhost python]$ python3 app.py
HUAWEI HUAWEI P20 Pro HW-01K
HUAWEI HUAWEI P20 Pro HW-01K
Huawei Technologies nova lite 2nova lite 2
Xperia XZ2 Premium SO-04K