Хобрук: Ваш путь к мастерству в программировании

Извлечение содержимого следующего и другого тега с помощью Beautifulsoup

Я хочу очистить определенный фрагмент html-кода.

мой код питона:

    soup = '''

            <p>
                <strong> abc </strong>
            </p>

            <ul>
                <li> 123 </li>
                <li> 456 </li>
            </ul>
    '''

    import bs4
    soup = bs4.BeautifulSoup(soup, 'html.parser')
    for link in soup.find_all('strong') :
        k = link.next_sibling
        print (link.text)
        print (k)
        print (k.text)

и вывод:

    abc

    AttributeError: 'NavigableString' object has no attribute 'text'

Как я могу извлечь 123 и 456, используя вышеуказанные теги?

Спасибо .


Ответы:


1

Решений много, например можно комбинировать методы find_next() и find_next_sibling():

soup = '''

        <p>
            <strong> abc </strong>
        </p>

        <ul>
            <li> 123 </li>
            <li> 456 </li>
        </ul>
'''

import bs4
soup = bs4.BeautifulSoup(soup, 'html.parser')
for link in soup.find_all('strong') :
    li1 = link.find_next().li
    li2 = li1.find_next_sibling()
    print(link.text)
    print(li1.text)
    print(li2.text)

Отпечатки:

 abc 
 123 
 456 
25.12.2019

2

Вам нужны 123 и 456, поэтому вы можете использовать :has и :contains (bs4 4.7.1+) для нацеливания на родителя p, имеющего дочерний элемент strong с текстом 'abc', а затем использовать смежный родственный комбинатор с селектором типа, чтобы получить соседний ul; наконец, используйте дочерний комбинатор с селектором типа li, чтобы получить дочерние элементы li.

from bs4 import BeautifulSoup as bs

html = '''

            <p>
                <strong> abc </strong>
            </p>

            <ul>
                <li> 123 </li>
                <li> 456 </li>
            </ul>
    '''

soup = bs(html, 'lxml')
print([i.text for i in soup.select('p:has(>strong:contains("abc")) + ul > li')])

Прочитайте о селекторах css здесь.

25.12.2019

3
from simplified_scrapy.simplified_doc import SimplifiedDoc 
html = '''<div><p>
                <strong> abc </strong>
            </p>
            <ul>
                <li> 123 </li>
                <li> 456 </li>
            </ul></div>'''
doc = SimplifiedDoc(html)
s = doc.strong # doc.getElementByTag('strong')
lis = s.parent.next.children
print(s.text) 
print(lis[0].text) 
print(lis[1].text) 

результат:

abc
123
456
26.12.2019
Новые материалы

Учебные заметки JavaScript Object Oriented Labs
Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

Разбор строк запроса в vue.js
Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
«Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..

Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

Как настроить Selenium в проекте Angular
Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

Аргументы прогрессивного улучшения почти всегда упускают суть
В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

Введение в Джанго Фреймворк
Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..