我正在尝试从 python 中的 html select 标签获取选定的值。好吧,当选项属性设置为 selected="selected" 时,它是成功的,但我试图废弃的网站具有不同的选项属性,例如:-
html = """
<select>
<option value="">Please select a vlalue</option>
<option selected value = "1">Male</option>
<option value = "2">Female</option>
</select>
"""
soup = BeautifulSoup(html, "html.parser")
dropdown = soup.find('select')
for options in dropdown.find_all('option', {'selected':"selected"}):
if options is not null:
print(options['value'])
所以我上面的代码无法获取所选值:任何一个数字都可以吗出来?
的代码之所以无法正常工作,是因为正在明确寻找属性
selected="selected"
,而的 HTML 并没有使用该属性来指示选定的选项。幸运的是,Beautiful Soup 有一个更强大的方法来找到所选的选项。
无需搜索特定的属性,而是可以使用
select('option:checked')
。这将返回所有被选中的
<option>
标签,而无论它们如何指示其选择状态。
以下是使用的 HTML 代码示例的更正代码:
from bs4 import BeautifulSoup
html = """
<select>
<option value="">Please select a vlalue</option>
<option selected value = "1">Male</option>
<option value = "2">Female</option>
</select>
"""
soup = BeautifulSoup(html, "html.parser")
dropdown = soup.find('select')
selected_option = dropdown.find('option', {'selected': True})
if selected_option:
print(selected_option['value'])
else:
print("No option selected")
在这段代码中:
-
我们使用
soup.find('select')
找到<select>
标签。 -
我们使用
dropdown.find('option', {'selected': True})
找到被选中的<option>
标签。 -
我们检查找到的标签是否为空。如果不是,则打印其
value
属性。
这种方法应该可以适用于任何指示选项已选中的方法,而不仅仅是
selected="selected"
属性。