bs4でid, classを駆使していく

まず、スマホランキングの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