BeautifulSoup не показывает тег <a> в теге <div>

Во время некоторых тестов я заметил, что тег а внутри тега div, красивый суп автоматически "переводит" его как текст:

<div class='a'>
   <a href='....'>TEXT</a>
   <i .....
</div>

Когда я ищу тег div с помощью команды find_all('div', {'class' : 'a'}) и пытаюсь распечатать результат div.a, bs4 показывает мне значение Никто ... но если я попытаюсь использовать print div.text, bs4 покажет только ТЕКСТ, а не тег а).

это код раздела:

soup = BeautifulSoup(html, 'lxml')
data=soup.find_all('div', {'class' : 'a'})    

for div in data:
   print div.a

$ None

Почему?

ОБНОВИТЬ: только что заметил ... вот еще одна проблема. В исходном коде есть тег а ... но теперь (глядя на результат с prettify) я понял, что этот тег bs4 заставляет меня видеть его как div, тогда как на самом деле это тег а! Странный!!!

ОШИБКА???

Решено Я немного почистил и удалил все пакеты для запросов и urllib3 ... затем переустановил все с помощью подходящий и теперь работает. Версии пакетов запросов и urllib3 (соответственно): 2.12.4-1 и 1.19.1-1

Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
43
1

Ответы 1

Мне не удалось воспроизвести вашу проблему, но в HTML-коде, который вы используете, есть опечатка: clas='a' должен быть class='a'.

Код, который я использовал:

from bs4 import BeautifulSoup

html = '''<div class='a'>
   <a href='....'>TEXT</a>
   <i> .....</i>
</div>'''
soup = BeautifulSoup(html, 'html.parser')
data = soup.find_all('div', {'class': 'a'})
for div in data:
   print (div.a)

На выходе я получил:

<a href = "....">TEXT</a>

.text не будет отображать теги, а будет отображать только текст внутри выбранного тега и его дочерних элементов. Вам также понадобится объект BeautifulSoup, чтобы использовать метод find_all.

Извините ... Неправильно написал ... но проблема осталась. Прочтите пожалуйста еще раз ... Я поправил пост

vincenzogianfelice 06.04.2021 22:35
ОБНОВИТЬ: только что заметил ... вот еще одна проблема. В исходном коде есть тег а ... но теперь (глядя на результат с prettify) я понял, что этот тег bs4 заставляет меня видеть его как div, хотя на самом деле это тег а! Странный!!! ОШИБКА???
vincenzogianfelice 06.04.2021 22:43

@vincenzogianfelice Я думаю, что проблема не в bs4 - у меня он отлично работает с python3. Как указано в здесь, поддержка bs4 для python2 уже прекращена. Если вы все еще хотите использовать python2, попробуйте удалить bs4 и выполнить pip2 install beautifulsoup4

Parzival 06.04.2021 22:46

Фактически я установил последнюю версию с помощью pip2. Но я попытался сделать что-то еще ... если я возьму кусок кода и вставлю его прямо в красивый суп, все будет работать нормально, но если я попытаюсь получить документ через Запросы, то тег 'a' не прочитает его мне ... BeautifulSoup(requests.get(url,headers).content, 'lxml')

vincenzogianfelice 06.04.2021 23:09

Я пробовал также с python3 ... но ничего ...

vincenzogianfelice 06.04.2021 23:25

хм, это немного странно. Я никогда не сталкивался с подобными проблемами. Вы пробовали использовать html.parser по умолчанию вместо lxml?

Parzival 06.04.2021 23:40

Или, может быть, вы можете вставить здесь URL-адрес, и я тоже могу попытаться выяснить это

Parzival 06.04.2021 23:41

Я нашел проблему. Проблема в Запросы .... я попытался сохранить index.html в файл и прочитать из файла ... и все работает нормально. Я также пробовал вставить индекс прямо в BeautifulSoup ... и работает! Только если читать напрямую из запросов (request.get(url).content) не получается ... очень странно! Я уверен, что проблема в requests.get

vincenzogianfelice 06.04.2021 23:47

Я понимаю. Вероятно, это потому, что BeautifulSoup не смог правильно интерпретировать формат, возвращаемый requests.get(url).content. С requests.get мало что можно сделать, может, попробуйте использовать html.parser в качестве парсера и посмотреть, сработает ли это?

Parzival 06.04.2021 23:56

Я решил проблему. Но я не знаю, как ... я немного почистил и удалил все пакеты python Запросы и urllib3 ... затем я переустановил все с помощью подходящий, и теперь все работает ... не спрашивайте меня, как ... но теперь все работает отлично ! Спасибо за терпение и добрый вечер (из Италии).

vincenzogianfelice 07.04.2021 00:17

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