早上好,亲爱的SO社区。我最近在尝试解析HTML时遇到一个小问题。我一直使用bs4模块,到目前为止一直很好。搜寻时,我主要需要隐藏的输入,如果按名称搜索它们,则可以轻松找到值。但是现在我发现了一个页面,其中输入也有一个ID,如下所示:
ClfSwitcher
我想找到值,如果其余的都知道。
我试着通过仅保留id部分并仅使用名称来搜索它,就像我以前那样,但这并不顺利,并且我没有找到值。
我的代码:
<input type="hidden" value="985207" name="order[ship_address_attributes]
[id]" id="order_ship_address_attributes_id">
我希望找到一种获取价值的方法,类似于我尝试的方法。有没有一种方法可以像名称一样添加ID?如果有任何帮助,我将非常高兴。非常感谢,并祝愿整个社区节日快乐。
答案 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']
这将选择input
和type=hidden
并具有属性name
和id
hiddenInputs = soup.select('input[type=hidden]')
for input in hiddenInputs:
if input.get('name') and input.get('id'):
print(input['value'])
答案 1 :(得分:1)
您可以将regex
与BeautifulSoup
一起使用以找到正确的标签。
例如:
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