использование nextSibling из BeautifulSoup ничего не выводит - PullRequest
5 голосов
/ 17 апреля 2011

Я пытаюсь использовать BeautifulSoup для следующего:

<h4>Hello<br /></h4>
<p><img src="http://url.goes.here" alt="hiya" class="img" />May 28, 1996</p>

Для этого примера, скажем, у меня есть тег <h4>, сохраненный в переменной tag. Когда я набираю print tag.text, вывод будет Hello, как и ожидалось.

Однако, когда я использую print tag.nextSibling, на выходе ничего не получается. Когда я набираю print tag.nextSibling.nextSibling, вывод будет <p><img src="http://url.goes.here" alt="hiya" class="img" />May 28, 1996</p>. Что здесь происходит? Почему я должен удвоить использование .nextSibling, чтобы перейти к тегу <p> в моем примере? Это постоянно ошибка.

Ответы [ 2 ]

4 голосов
/ 17 апреля 2011

Очевидно, что .nextSibling будет захватывать белый текст. Таким образом, на реальной странице, с которой я работаю, между тегами <h4> и <p> есть белый текст, поэтому мне приходится удваивать.

Данные

Запись:

print tag.__class__
print tag.nextSibling.__class__
print tag.nextSibling.nextSibling.__class__

Урожайность:

<class 'BeautifulSoup.Tag'>
<class 'BeautifulSoup.NavigableString'>
<class 'BeautifulSoup.Tag'>
2 голосов
/ 17 мая 2015

Вот что написано в официальной документации: http://www.crummy.com/software/BeautifulSoup/bs4/doc/#going-down

В реальных документах тегом .next_sibling или .previous_sibling обычно будет строка, содержащая пробел.Возвращаясь к документу «три сестры»:

<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a>
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>

Вы можете подумать, что .next_sibling первого тега будет вторым тегом.Но на самом деле это строка: запятая и символ новой строки, отделяющие первый тег от второго:

link = soup.a
link
# <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>

link.next_sibling
# u',\n'

Второй тег - это фактически .next_sibling запятой:

link.next_sibling.next_sibling
# <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...