如何使用ID和名称查找隐藏的输入值-Python,bs4

时间:2018-12-25 22:56:43

标签: python parsing beautifulsoup

早上好,亲爱的SO社区。我最近在尝试解析HTML时遇到一个小问题。我一直使用bs4模块,到目前为止一直很好。搜寻时,我主要需要隐藏的输入,如果按名称搜索它们,则可以轻松找到值。但是现在我发现了一个页面,其中输入也有一个ID,如下所示:

ClfSwitcher

我想找到值,如果其余的都知道。

我试着通过仅保留id部分并仅使用名称来搜索它,就像我以前那样,但这并不顺利,并且我没有找到值。

我的代码:

<input type="hidden" value="985207" name="order[ship_address_attributes] 
[id]" id="order_ship_address_attributes_id">

我希望找到一种获取价值的方法,类似于我尝试的方法。有没有一种方法可以像名称一样添加ID?如果有任何帮助,我将非常高兴。非常感谢,并祝愿整个社区节日快乐。

2 个答案:

答案 0 :(得分:2)

为什么不通过id选择它?

vle = soup.find('input',{'id':'order_ship_address_attributes_id'})['value']

如果name值没有空格或换行符,请选择

vle = soup.find('input', {'name':'order[ship_address_attributes][id]'})['value']

这将选择inputtype=hidden并具有属性nameid

hiddenInputs = soup.select('input[type=hidden]')
for input in hiddenInputs:
    if input.get('name') and input.get('id'):
        print(input['value'])

答案 1 :(得分:1)

您可以将regexBeautifulSoup一起使用以找到正确的标签。

例如:

import re
from bs4 import BeautifulSoup as bs

a = '''<input type="hidden" value="985207" name="order[ship_address_attributes] 
[id]" id="order_ship_address_attributes_id">'''

# Or:
# soup = bs(a, 'lxml')
soup = bs(a, 'html.parser')
data = soup.find('input', {'name': re.compile(r'order\[\w+\]\s+\[\w+\]')})
print(data['value'])  # 985207

或者,如果您想查找与regex完全匹配的标签,则可以执行以下操作:

data = soup.find('input', {'name': re.compile(r'order\[ship_address_attributes\]\s+\[id\]')})
print(data['value'])  # 985207