使用python从select标签中选择第一个选项

时间:2017-05-30 10:31:42

标签: python python-3.x beautifulsoup

我有一个选择标签,例如:

<select name="select_tag">
<option value="">...</option>
<option value="Val1">Value1</option>
<option value="Val2">Value2</option>
<option value="Val3">Value3</option>
<option value="Val4">Value4</option>
</select>

我尝试使用漂亮的脚本从网页解析上述内容并选择一个选项并发送该有效负载。我使用以下代码:

sauce = . . . . 
soup = bs.BeautifulSoup(sauce,"html.parser")
payload = dict()
inputs = form.findAll('select')
for i in inputs:
    input_1 = i.get('name')
    option_value = soup.find('option').get('value')
    payload[input_1] = option_value
    print(payload)

我的目标:找到表单中的选择标记,找到它的名称,从任何选项标记中获取值,其中值不是空的(任何值来自可用选项标记,其中有一些值),发送有效载荷。

但是,当我运行上面的脚本时,我将option_value视为&#39; none&#39;。 例如= Payload Dict的值:Payload = {&#39; select_tag&#39;:&#39; none&#39;}

如果有人也可以像元素

那样指定元素的答案,那将是值得注意的

2 个答案:

答案 0 :(得分:0)

您正在使用find for选项,而应使用findAll查找所有选项。

sauce = . . . . 
soup = bs.BeautifulSoup(sauce,"html.parser")
payload = dict()
inputs = soup.findAll('select')
for i in inputs:
    input_1 = i.get('name')
    for opt in i.findAll('option'):
        option_value = opt.get('value')
        payload[input_1] = option_value
    print(payload)

答案 1 :(得分:0)

看起来你期待这一行

option_value = soup.find('option').get('value')

每次代码调用它时都要做一些不同的事情。但它并没有。它每次都会标识第一个<option>标记,并且该标记具有您不想要的空白属性value

试试这个:

option_tags=soup.findAll('option')
values = [v.get('value') for v in option_tags]
# Now you have ['', 'Val1', 'Val2', 'Val3', 'Val4'], remove the blank
values = list(filter(None,values))
# Now you have ['Val1', 'Val2', 'Val3', 'Val4']

我不清楚循环应该做什么,所以我不能告诉你一旦拥有它就会对values做些什么。