我想使用Beautiful Soup和Requests抓取一个网站的数据,我几乎可以得到我想要的东西,但是我找不到一种方法来过滤最后的步骤:
这是我的代码:
variants = soup.find('div', class_='product-configure')
print(variants)
这将打印以下内容:
<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>
我该如何过滤它,使其仅打印“数据值”中的所有数字? (例如“ 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>
答案 0 :(得分:2)
您可以将类与属性CSS选择器一起使用
items = [item['data-value'] for item in soup.select('.product-configure [data-value]')]
如果只考虑一个类,则可以将id用于选择
items = [item['data-value'] for item in soup.select('#custom-variants [data-value]')]
答案 1 :(得分:0)
您可以使用soup.find_all()并使用具有属性的字典
options = soup.find_all("option", {"data-value": True})
结果:
for o in options:
print(o.attrs["data-value"])
177379037
177379043
177379223
答案 2 :(得分:0)
您使用find_all
获取所有<option>
标签,然后打印出data-value
属性。请注意,尽管并非所有option
标签都具有该属性,所以如果没有找到try
,我会在其中放一个data-value
。
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>'''
import bs4
soup = bs4.BeautifulSoup(html, 'html.parser')
elem = soup.find_all('option')
for each in elem:
try:
print (each['data-value'])
except:
continue
输出:
177379037
177379043
177379223