BeautifulSoup String Поиск - PullRequest
       0

BeautifulSoup String Поиск

1 голос
/ 15 марта 2020

Я гуглил и смотрел здесь другой вопрос по поиску строки в объекте BeautifulSoup.

В моем поиске следующее должно обнаружить строку - но это не так:

strings = soup.find_all(string='Results of Operations and Financial Condition')

Однако строка обнаруживает следующее:

tags = soup.find_all('div',{'class':'info'})

for tag in tags:

    if re.search('Results of Operations and Financial Condition',tag.text):

    ''' Do Something'''

Почему один работает, а другой нет?

Ответы [ 2 ]

2 голосов
/ 15 марта 2020

Возможно, вы захотите использовать:

strings = soup.find_all(string=lambda x: 'Results of Operations and Financial Condition' in x)

Это происходит потому, что реализация find_all ищет строку, которую вы ищете, чтобы точно соответствовать. Я полагаю, у вас может быть какой-то другой текст рядом с 'Results of Operations and Financial Condition'.

Если вы проверите документы здесь , вы можете увидеть, что можете дать функцию этому параметру string, и кажется, что следующие строки эквивалентны:

soup.find_all(string='Results of Operations and Financial Condition')
soup.find_all(string=lambda x: x == 'Results of Operations and Financial Condition')
1 голос
/ 15 марта 2020

Для этого кода

page = urllib.request.urlopen('https://en.wikipedia.org/wiki/Alloxylon_pinnatum')
sp = bs4.BeautifulSoup(page)
print(sp.find_all(string=re.compile('The pinkish-red compound flowerheads'))) # You need to use like this to search within text nodes.
print(sp.find_all(string='The pinkish-red compound flowerheads, known as'))
print(sp.find_all(string='The pinkish-red compound flowerheads, known as ')) #notice space at the end of string

Результаты -

['The pinkish-red compound flowerheads, known as ']
[]
['The pinkish-red compound flowerheads, known as ']

Похоже, string аргумент ищет точное полное совпадение строки, а не какой-то HTML текст node содержит эту строку, но точное значение HTML text node . Однако вы можете использовать регулярные выражения для поиска, содержит ли текстовый узел некоторую строку, как показано в приведенном выше коде.

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