Пример HTML
<a class = "accordion-item__link" href = "/identity-checking/individual"><!-- react-text: 178 -->Australia<!-- /react-text --></a>
Когда я бегу
soup.find("a", text = "Australia")
он ничего не возвращает.
Если я убегу
soup.find("a", href = "/identity-checking/individual")
находит метку. soup.find("a", href = "/identity-checking/individual").text
также возвращает "Австралия"
это как-то связано с комментариями?
Попытайтесь извлечь текст после нахождения тега, то есть:
result = ""
for tag in soup.find_all('a'):
if tag.text == "Australia":
result = tag
По какой-то причине обнаружение текста тега переворачивается, когда есть комментарий xml
.
Вы можете использовать это как обходной путь:
[ele for ele in soup('a') if ele.text == 'Australia']
Я пытаюсь найти метод, который придерживается метода find
, поскольку он наиболее удобный и адаптируемый. Проблема здесь в том, что комментарии HTML портят движок. Было бы полезно удалить комментарии вручную.
from bs4 import BeautifulSoup, Comment
bs = BeautifulSoup(
"""
<a class = "accordion-item__link" href = "/identity-checking/individual"><!-- react-text: 178 -->Australia<!-- /react-text --></a>
""",
"lxml"
)
# find all HTML comments and remove
comments = bs.findAll(text=lambda text:isinstance(text, Comment))
[comment.extract() for comment in comments]
r = bs.find('a', text='Australia')
print(r)
# <a class = "accordion-item__link" href = "/identity-checking/individual">Australia</a>
Отсюда взялась методика удаления комментариев Как удалить теги комментариев из HTML с помощью BeautifulSoup?
Если комментарии предназначены для сохранения, вы можете работать над копией супа.