Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python从select标记中选择第一个选项_Python_Python 3.x_Beautifulsoup - Fatal编程技术网

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

使用python从select标记中选择第一个选项,python,python-3.x,beautifulsoup,Python,Python 3.x,Beautifulsoup,我有一个select标记,如下所示: <select name="select_tag"> <option value="">...</option> <option value="Val1">Value1</option> <option value="Val2">Value2</option> <option value="Val3">Value3</option> <optio

我有一个select标记,如下所示:

<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>
我的目标:在表单中找到select标记,找到它的名称,从任何值不为空的选项标记中获取值((存在某些值的可用选项标记中的任何值),发送有效负载

但是,当我运行上面的脚本时,我得到选项_值为“none”。 例如=有效负载Dict:Payload的值={'select_tag':'none'}


如果有人也可以为元素指定一个答案,就像您正在使用find for option的元素一样,那么您应该使用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)

您使用的是find for option,而应该使用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)

看起来你在等这一行

option_value = soup.find('option').get('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']

我不清楚循环应该做什么,所以我无法告诉您一旦有了
值,该如何处理它。

看起来您在期待这一行

option_value = soup.find('option').get('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']

我不清楚循环应该做什么,所以一旦你有了
,我就无法告诉你如何处理它。

我的代码有点麻烦。我想要的是从任意选项值发送任意值的单个有效负载。例如,如果有3个选项(下拉列表),橙色、苹果、葡萄。我的有效负载应该是{'select-tag':'Orange'}(或者任何水果,但是值不应该是空的,就是这样),我的代码有点麻烦。我想要的是从任意选项值发送任意值的单个有效负载。例如,如果有3个选项(下拉列表),橙色、苹果、葡萄。我的有效负载应该是{'select-tag':'Orange'}(或者任何水果,但值不应该为空,仅此而已)