我想知道一个属性是否被''或''包围还是非常简单。 例如:
html = """<input class="form-control" name='searchString' type=text value= "myString"/>"""
对此标签的属性值进行循环将返回不包含周围字符的值,在名称中为“'',类型为不包含周围字符,在值中为“”。 所以有什么办法可以用beautifulsoup做到这一点,还是我自己应该使用正则表达式/解析字符串? 预先感谢。
答案 0 :(得分:0)
解析器将“更正”您提供给BeautifulSoup的标记。
from bs4 import BeautifulSoup
html = """<input class="form-control" name='searchString' type=text value= "myString"/>"""
print(BeautifulSoup(html,'lxml'))
print(BeautifulSoup(html,'html5lib'))
print(BeautifulSoup(html,'html.parser'))
#<html><body><input class="form-control" name="searchString" type="text" value="myString"/></body></html>
#<html><head></head><body><input class="form-control" name="searchString" type="text" value="myString"/></body></html>
#<input class="form-control" name="searchString" type="text" value="myString"/>
您可以看到所有引号现在都是"
。要回答您的问题-我认为BeautiifulSoup不可能。正则表达式是可能的(您必须将其应用于请求响应)。
答案 1 :(得分:0)
html.parser
使用以下正则表达式提取元素属性
html = """<input class="form-control" name='searchString' type=text value= "myString"/>"""
attrfind = re.compile(
r'((?<=[\'"\s/])[^\s/>][^\s/=>]*)(\s*=+\s*'
r'(\'[^\']*\'|"[^"]*"|(?![\'"])[^>\s]*))?(?:\s|/(?!>))*')
attrs = attrfind.findall(html)
for attr in attrs:
print('{}: {}'.format(attr[0], attr[2]))
结果
class: "form-control"
name: 'searchString'
type: text
value: "myString"