Vie*_*NaM 5 python filtering beautifulsoup web-scraping
我想使用 Beautiful Soup 和 requests 来抓取网站的数据,并且我几乎得到了我想要的,但我找不到一种方法来过滤最后的步骤:
这是我的代码:
variants = soup.find('div', class_='product-configure')
print(variants)
Run Code Online (Sandbox Code Playgroud)
这将打印以下内容:
<div class="product-configure">
<select id="custom-variants">
<option disabled="disabled" selected="selected">Maak een keuze</option>
<option data-status="available" data-value="177379037">Size : EU 40.5 (US 7)
</option>
<option data-status="available" data-value="177379043">Size : EU 41.5 (US 8)
</option>
<option data-status="available" data-value="177379223">Size : EU 42.5 (US 9)
</option>
</select>
</div>
Run Code Online (Sandbox Code Playgroud)
我如何过滤它,以便它只打印“数据值”中的所有数字?(例如“177379037”作为第一行的输出)
这是 HTML:
<div class="gui-select">
<div class="product-configure">
<select id="custom-variants">
<option selected="selected" disabled="disabled">Select an option</option>
<option data-value="177379037" data-status="available">Size : EU 40.5 (US 7)</option>
<option data-value="177379043" data-status="available">Size : EU 41.5 (US 8)</option>
<option data-value="177379223" data-status="available">Size : EU 42.5 (US 9)</option>
</div>
Run Code Online (Sandbox Code Playgroud)
您可以使用 soup.find_all() 并使用带有属性的字典
options = soup.find_all("option", {"data-value": True})
Run Code Online (Sandbox Code Playgroud)
结果:
for o in options:
print(o.attrs["data-value"])
Run Code Online (Sandbox Code Playgroud)
177379037
177379043
177379223
Run Code Online (Sandbox Code Playgroud)