使用BeautifulSoup,尝试在选项标签中提取数据

时间:2019-06-24 13:45:36

标签: python

我正在尝试构建一个运动鞋机器人,现在我正努力从网站上获取数据值,这些值用于结帐页面的网址中。

我已使用以下BeautifulSoup命令抓取

size=soup.find(id="custom-variants")

并获得以下输出:

<select id="custom-variants">
<option disabled="disabled" selected="selected">Make a choice</option>
<option data-status="available" data-value="191707602">Size : EU 38.5 (US 6)</option>
<option data-status="available" data-value="191707614">Size : EU 39 (US 6.5)</option>
<option data-status="available" data-value="191707617">Size : EU 40 (US 7)</option>
<option data-status="available" data-value="191707623">Size : EU 40.5 (US 7.5)</option>
<option data-status="available" data-value="191707626">Size : EU 41 (US 8)</option>
<option data-status="available" data-value="191707632">Size : EU 42 (US 8.5)</option>
<option data-status="available" data-value="191707641">Size : EU 42.5 (US 9)</option>
<option data-status="available" data-value="191707644">Size : EU 43 (US 9.5)</option>
<option data-status="available" data-value="191707650">Size : EU 44 (US 10)</option>
<option data-status="available" data-value="191707656">Size : EU 44.5 (US 10.5)</option>
<option data-status="available" data-value="191707659">Size : EU 45 (US 11)</option>
<option data-status="available" data-value="191707662">Size : EU 45.5 (US 11.5)</option>
<option data-status="available" data-value="191707665">Size : EU 46 (US 12)</option>
<option data-status="available" data-value="191707599">Size : EU 38 (US 5.5)</option>
</select>

但是我真正想要的是选项标签中的数据值。

任何人都可以帮忙。

1 个答案:

答案 0 :(得分:1)

尝试一下

from bs4 import BeautifulSoup


html = '''<select id="custom-variants">
<option disabled="disabled" selected="selected">Make a choice</option>
<option data-status="available" data-value="191707602">Size : EU 38.5 (US 6)</option>
<option data-status="available" data-value="191707614">Size : EU 39 (US 6.5)</option>
<option data-status="available" data-value="191707617">Size : EU 40 (US 7)</option>
<option data-status="available" data-value="191707623">Size : EU 40.5 (US 7.5)</option>
<option data-status="available" data-value="191707626">Size : EU 41 (US 8)</option>
<option data-status="available" data-value="191707632">Size : EU 42 (US 8.5)</option>
<option data-status="available" data-value="191707641">Size : EU 42.5 (US 9)</option>
<option data-status="available" data-value="191707644">Size : EU 43 (US 9.5)</option>
<option data-status="available" data-value="191707650">Size : EU 44 (US 10)</option>
<option data-status="available" data-value="191707656">Size : EU 44.5 (US 10.5)</option>
<option data-status="available" data-value="191707659">Size : EU 45 (US 11)</option>
<option data-status="available" data-value="191707662">Size : EU 45.5 (US 11.5)</option>
<option data-status="available" data-value="191707665">Size : EU 46 (US 12)</option>
<option data-status="available" data-value="191707599">Size : EU 38 (US 5.5)</option>
</select>'''


soup = BeautifulSoup(html, 'html.parser')
for option in soup.find_all('option'):
    print(option.attrs)
    print(option.text)
    print('-----')
data_values = [option.attrs.get('data-value') for option in soup.find_all('option')]
print(data_values)