BeautifulSoup, получая больше прибыли, чем ожидалось с регулярным выражением - PullRequest
0 голосов
/ 27 февраля 2019

Используя BeautifulSoup, у меня есть следующая строка:

dimensions = SOUP.select(".specs__title > h4", text=re.compile(r'Dimensions'))

Однако он возвращает больше, чем просто теги с текстом «Размеры», как показано в следующих результатах:

[<h4>Dimensions</h4>, <h4>Details</h4>, <h4>Warranty / Certifications</h4>]

Я неправильно использую регулярное выражение в связи с тем, как работает SOUP?

1 Ответ

0 голосов
/ 27 февраля 2019

Интерфейс select не имеет ключевого слова text.Прежде чем мы продолжим, предполагается, что вы используете BeautifulSoup 4.7 +.

Если вы хотите фильтровать по тексту, вы можете сделать что-то вроде этого:

dimensions = SOUP.select(".specs__title > h4:contains(Dimensions)")

Более подробная информация о реализации :contains() псевдокласса доступна здесь: https://facelessuser.github.io/soupsieve/selectors/#:contains.

РЕДАКТИРОВАТЬ: Чтобы уточнить, в настоящее время нет способа включить регулярное выражение непосредственно в вызов select.Вам пришлось бы фильтровать элементы по факту, чтобы использовать регулярные выражения.В будущем может быть возможность использовать регулярные выражения через некоторый пользовательский псевдокласс, но в настоящее время в Soup Sieve такой функции нет (реализация Beautiful Soup в версии 4.7+).

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