请求beautifulsoup解析select标记中的值



我想修改我现有的代码,该代码目前解析网页源的td属性,并将其切换为等于数值的option字段的value。让我来解释

import requests, re, collections
from bs4 import BeautifulSoup
def get_content(url):
if type(url) != str:
print('You need to included a string')
exit()
else:
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0',
'From': 'user@umbc.edu'  
}
req  = requests.get(url,headers=headers)
soup = BeautifulSoup(req.content, 'html.parser')
current_month=soup.find_all('td', {'id': 'monatevent'})
fwk_nextmonth=soup.find_all('td', {'id': 'aevent'})
curr_month = []
fwk_next_month = []

我现在想解析以下selectoption属性,以在option value=08时发出警报,例如:

<select name="month" onchange="submit()">
<option value="09" selected="">09</option>
<option value="10">10</option><option value="11">11</option>
</select>

如果在代码中使用以下选择器,则不会返回任何内容:current_month=汤.find_all("选择",{"选项":'08'}(

有人能帮忙吗?非常感谢。

您可以使用BeautifulSoup中内置的CSS选择器。选择器option[selected]将找到具有属性selected:的标记<option>

data = """<select name="month" onchange="submit()">
<option value="09" selected="">09</option>
<option value="10">10</option><option value="11">11</option>
</select>"""
from bs4 import BeautifulSoup
soup = BeautifulSoup(data, 'lxml')
print(soup.select_one('option[selected]').text)

打印:

09

编辑:

If you want to find option with value=08, you can do CSS selector `option[value=08]`:
data = """<select name="month" onchange="submit()">
<option value="08">08</option>
<option value="09" selected="">09</option>
<option value="10">10</option><option value="11">11</option>
</select>"""
from bs4 import BeautifulSoup
soup = BeautifulSoup(data, 'lxml')
print(soup.select_one('option[value=08]'))

打印:

<option value="08">08</option>

我认为您试图从html字符串中找到所选选项的值。也许能帮上忙。。

from bs4 import BeautifulSoup
html_str = """<select name="month" onchange="submit()">
<option value="09" selected="">09</option>
<option value="10">10</option><option value="11">11</option>
</select>"""
soup = BeautifulSoup(html_str, 'html.parser')
select = soup.find('select')
for option in select.find_all('option'):
if option.has_attr('selected'):
print('Value:', option.get('value'))

最新更新