如何使用beautifulsoup在下拉列表中获取选定的值?

时间:2019-06-26 14:18:01

标签: python beautifulsoup web-crawler

我是网络爬虫的新手,但是遇到了在下拉列表中获取所选值的问题。我目前正在使用beautifulsoup尝试解决我的问题。

来源就像:

<TDalign="right">投资方式:   


    </TD>
<TD>

<SELECT name="financingType">

<OPTION selected="selected"value="48">增资扩股</OPTION>
<OPTION value="211">股权受让</OPTION>
<OPTION value="212">增资+受让</OPTION>
<OPTION value="771">CB</OPTION>
<OPTION value="772">担保</OPTION>

</SELECT>

在这种情况下,我想获得带有值标签“ 48”(所选选项)的文本,即“增资扩股”。

老实说,我对此一无所知。我试过了:

financingType = soup.find('select',{'name': 'financingType'}).get('value') 

但是它给出一个NONE值。

我想问一下我可以通过什么方法获得此下拉列表的选定值?

问题是我具有这些“下拉”类型的许多属性,例如,在这种情况下,我具有。我想问一下如何找到“ financingType”的特定属性?

非常感谢您。

3 个答案:

答案 0 :(得分:2)

使用css选择器可以更快地获取值。

from bs4 import BeautifulSoup

data='''<TDalign="right">投资方式:   


    </TD>
<TD>

<SELECT name="financingType">

<OPTION selected="selected" value="48">增资扩股</OPTION>
<OPTION value="211">股权受让</OPTION>
<OPTION value="212">增资+受让</OPTION>
<OPTION value="771">CB</OPTION>
<OPTION value="772">担保</OPTION>

</SELECT>'''

soup=BeautifulSoup(data,'lxml')
print(soup.select_one('option[selected="selected"]')['value'])
print(soup.select_one('option[selected="selected"]').text)

在控制台上打印:

    48
增资扩股

已编辑

print(soup.select_one('select[name="financingType"]').select_one('option[selected="selected"]').text)

答案 1 :(得分:1)

您可以使用option找到选定的soup.find标签,并指定selected属性的值:

from bs4 import BeautifulSoup as soup
result = soup(html, 'html.parser').find('select', {'name':'financingType'}).find('option', {'selected':'selected'})['value']

输出:

'48'

答案 2 :(得分:0)

您可以使用mechanicalsoup轻松地做到这一点 解决方案看起来像这样

import mechanicalsoup
bro = mechanicalsoup.StatefulBrowser()
bro.open(url)
bro.select_form(f'form[action={action_name}]')
bro["financingType"] = "48"

您将需要在html中找到表单操作并将其设置为变量action_name