BeautifulSoup идентифицирует окружающие символы атрибута - PullRequest
0 голосов
/ 29 декабря 2018

так просто, как я хотел бы знать, окружен ли атрибут '' или "'или не окружен вообще.например:

html = """<input class="form-control" name='searchString' type=text value= "myString"/>"""

зацикливание на значениях атрибутов этого тега вернет значение без окружающего символа, который в случае имени является его '', в типе нет окружающего символа, а в значении его "".так есть ли способ сделать это с Beautifulsoup или я должен использовать регулярное выражение / парсинг строки самостоятельно?заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 30 декабря 2018

следующее регулярное выражение используется 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"
0 голосов
/ 29 декабря 2018

Парсеры «исправят» разметку, предоставленную вами 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.Это возможно с регулярным выражением (вам придется применить его к вашему запросу ответа).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...