Python / BeautifulSoup: Как посмотреть прямо под комментарием к коду? - PullRequest
1 голос
/ 03 апреля 2011

Я анализирую некоторые веб-страницы с BeautifulSoup и пытаюсь работать в библиотеке (вместо того, чтобы пытаться решить все с помощью грубого принудительного регулярного выражения ..)

Страница, на которую я смотрю, структурирована следующим образом:

<!--comment--> 
<div>a</div>
<div>b</div>
<div>c</div>
<!--comment--> 
<div>a</div>
<div>b</div
<div>c</div

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

Спасибо!

Ответы [ 2 ]

1 голос
/ 03 апреля 2011

Комментарии - это узлы, как и все остальное:

from BeautifulSoup import BeautifulSoup
from BeautifulSoup import Comment
from BeautifulSoup import NavigableString

text = BeautifulSoup("""<!--comment--><div>a</div><div>b</div><div>c</div>
                        <!--comment--><div>a</div><div>b</div><div>c</div>""")

comments = text.findAll(text=lambda elm: isinstance(elm, Comment))
for comment in comments:
    next_sib = comment.nextSibling
    while not isinstance(next_sib, Comment) and \
        not isinstance(next_sib, NavigableString) and next_sib:
        # This prints each sibling while it isn't whitespace or another comment
        # Append next_sib to a list, dictionary, etc, etc and
        # do what you want with it
        print next_sib 
        next_sib = next_sib.nextSibling

EDIT:

Он не обнаруживает идентичные комментарии (текст комментария?), Но вы можете решить это, проверив, идентичен ли текст комментария предыдущему блоку комментария.

0 голосов
/ 03 апреля 2011

Я не вижу высокоуровневого API для получения узлов комментариев непосредственно в BeautifulSoup.Вместо этого вы должны пройти через дерево разбора самостоятельно.

См. 1

Примеры показывают, что вы можете проверить узел на класс «Комментарий» ... это все, что у вас есть.

Другойстрашная идея:

Вы можете визуализировать строку документа по строке с помощью soup.prettify (), а затем анализировать сгенерированный вывод построчно, проверять комментарии и снова вводить следующие строки в BeautifulSoup.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...