Reputation: 73
I am trying to build a sneaker bot, right now i am struggling to obtain data values from the site, these are used in the url for the checkout page.
I've used the following BeautifulSoup command to scrape
size=soup.find(id="custom-variants")
and got the following output:
<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>
But what i really want is the data-value from within the option tag.
Can anyone help please.
Upvotes: 0
Views: 251
Reputation: 23825
Try this
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)
Upvotes: 1