BeautifulSoup4 не может найти тег "a" при поиске текста

Пример 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 также возвращает "Австралия"

это как-то связано с комментариями?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
42
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Попытайтесь извлечь текст после нахождения тега, то есть:

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?

Если комментарии предназначены для сохранения, вы можете работать над копией супа.

Другие вопросы по теме