С помощью bs4 4.7.1 объедините псевдоклассы :has
и :contains
, чтобы получить строку и tds внутри.
Этот бит нацелен на правильный тег a
, если присутствует в его тексте
a:contains("xyz")
Затем вы получаете родительскую строку (tr
), имеющую этот тег a
tr:has(a:contains("xyz"))
И, наконец, используйте комбинатор потомков и td
селектор типа , чтобы получить все td
в этой строке. Использование понимания списка для возврата списка.
from bs4 import BeautifulSoup as bs
html = '''
<tr>
<td>
<a>xyz</a>
</td>
<td>address</td>
<td>phone number</td>
</tr>
'''
soup = bs(html, 'lxml')
items = [item.text.strip() for item in soup.select('tr:has(a:contains("xyz")) td')]
print(items)