BeautifulSoup: не удается найти тег с текстом, который он содержит - PullRequest
0 голосов
/ 19 сентября 2019

У меня проблемы с поиском тега с использованием текста, который он содержит на следующей странице: Ссылка на веб-страницу

Я пытаюсь найти коды Bloomberg и Reuters, используя следующий код.Используя cssSelector, я попробовал:

css_selector = 'tr:has(> td:contains("Bloomberg Code"))'
my_tag: Tag = my_soup.select_one(css_selector)

Используя find, я попробовал:

my_tag = my_soup.find(lambda t: t.Tag == 'td' and re.findall('Bloomberg Code', t.text, flags=re.I))

Они оба возвращают огромное количество HTML-кода, который начинается с тега "tr", но нене соответствует тому, что я ожидал:

<tr>
    <td style="padding-top:5px">- Bloomberg Code : </td>
    <td style="padding-left:10px;padding-top:5px" align="left">&nbsp;FLTR:ID</td>
</tr>

Я думаю, что проблема может заключаться в том, что Beautifulsoup видит ее как строку, по которой можно перемещаться, но когда я проверяю тип результата, найденного для my_tag, он говорит: class 'bs4.element.Tag '

Спасибо за помощь Best

1 Ответ

0 голосов
/ 19 сентября 2019

Вам нужен заголовок User-Agent и требуется соседний брат td из td, который содержит поисковый термин.

from bs4 import BeautifulSoup as bs
import requests

search_strings = ['Bloomberg Code :',' Reuters Code :']
r = requests.get('https://www.marketscreener.com/FLUTTER-ENTERTAINMENT-PLC-59029817/company/', headers = {'User-Agent':'Mozilla/5.0'})
soup = bs(r.content, 'lxml')

for search_string in search_strings:
    node = soup.select_one(f'td:contains("{search_string}") + td')
    if node is None:
        print(f'{search_string} not found')
    else:
        print(node.text)
...