Получение повторов в вложенных тегах BeautifulSoup - PullRequest
0 голосов
/ 24 мая 2019

Я пытаюсь разобрать html, используя beautifulsoup (вызывается с помощью lxml).На вложенных тегах я получаю повторяющийся текст

Я пытался пройти и подсчитывать только те теги, у которых нет дочерних элементов, но затем я теряю данные

, данные:

<div class="links">
   <ul class="links inline">
      <li class="comment_forbidden first last">
         <span> to post comments</span>
      </li>
   </ul>
</div>

и работает:

soup = BeautifulSoup(file_info, features = "lxml")
soup.prettify().encode("utf-8")
    for tag in soup.find_all(True):
        if check_text(tag.text): #false on empty string/ all numbers 
            print (tag.text)

Я получаю "оставлять комментарии" 4 раза.Есть ли красивый способ получить результат только один раз?

Ответы [ 2 ]

0 голосов
/ 24 мая 2019

С учетом ввода типа

<div class="links">
   <ul class="links inline">
      <li class="comment_forbidden first last">
         <span> to post comments1</span>
      </li>
   </ul>
</div>
<div class="links">
   <ul class="links inline">
      <li class="comment_forbidden first last">
         <span> to post comments2</span>
      </li>
   </ul>
</div>
<div class="links">
   <ul class="links inline">
      <li class="comment_forbidden first last">
         <span> to post comments3</span>
      </li>
   </ul>
</div>

Вы можете сделать что-то вроде

[x.span.string for x in soup.find_all("li", class_="comment_forbidden first last")]

, что даст

[' to post comments1', ' to post comments2', ' to post comments3']

find_all(), чтобы найти всетеги <li> класса comment_forbidden first last и дочерний тег <span> каждого содержимого этих тегов <li> получают с использованием их атрибута string.

0 голосов
/ 24 мая 2019

Вы можете использовать find() вместо find_all(), чтобы получить желаемый результат только один раз

...