Как очистить элементы HTML без класса или идентификатора, указанного в атрибуте с Beautifulsoup4

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

Как этот снимок экрана:

Как очистить элементы HTML без класса или идентификатора, указанного в атрибуте с Beautifulsoup4

<div class = "cat_box_desc">
    <h3>Status:</h3>
    on-going <br>
    <h3>Genres:</h3>

    <br>
    <h3>Description:</h3>
    <div align = "justify">
        <p> Information</p>
        <p>Type: TV</p>
        <p>Episodes: Unknown</p>
        <p>Status: Currently Airing</p>
        <p>Aired: Oct 7, 2013 to ?</p>
        <p>Producers: Sunrise, TV Tokyo, Sotsu Agency</p>
        <p>Genres: Mecha</p>
        <p>Duration: 25 min. per episode</p>
        <p>Synopsis:</p>
        <p>Gundam Build Fighter adalah sebuah pertarungan simulasi Gundam. Unit Gundam dirangkai dari model plastiknya. Tokoh utamanya adalah seorang anak laki-laki yang bernama Iori Sei. Sei memiliki kemampuan merangkai Gundam yang hebat, namun dia tak
            memiliki kemampuan untuk mengendalikan gundam yang ia rangkai saat melakukan Gunpla Battle. Namun satu hari dia bertemu dengan seorang pencuri roti misterius, yang memberinya sebuah batu permata.</p>
    </div><br>
    <div style = "padding-left: 560px; padding-bottom:20px;" class = "spacebook">
        <div class = "fb-like" data-href = "http://animeindo.video/category/gundam-build-fighter/" data-width = "450" data-layout = "box_count" data-show-faces = "false" data-send = "false"></div>
    </div>
</div>

Я могу очистить данные внутри class = "cat_box_desc", но я получу все данные внутри, мне это не нужно, я хочу разделить данные.

Я не знаю, чтобы разделить данные, как на скриншоте выше, есть статус, жанр, описание, Информация и другие в тегах H1 и п, потому что на нем не указаны класс или я бы.

Итак, как это сделать в Beautifulsoup4 ..?

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

Ответы 1

Ответ принят как подходящий

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

Для полей, разделенных :, я бы проанализировал их в словаре для облегчения доступа:

import re

from bs4 import BeautifulSoup

data = """
<div class = "cat_box_desc">
    <h3>Status:</h3>
    on-going <br>
    <h3>Genres:</h3>

    <br>
    <h3>Description:</h3>
    <div align = "justify">
        <p> Information</p>
        <p>Type: TV</p>
        <p>Episodes: Unknown</p>
        <p>Status: Currently Airing</p>
        <p>Aired: Oct 7, 2013 to ?</p>
        <p>Producers: Sunrise, TV Tokyo, Sotsu Agency</p>
        <p>Genres: Mecha</p>
        <p>Duration: 25 min. per episode</p>
        <p>Synopsis:</p>
        <p>Gundam Build Fighter adalah sebuah pertarungan simulasi Gundam. Unit Gundam dirangkai dari model plastiknya. Tokoh utamanya adalah seorang anak laki-laki yang bernama Iori Sei. Sei memiliki kemampuan merangkai Gundam yang hebat, namun dia tak
            memiliki kemampuan untuk mengendalikan gundam yang ia rangkai saat melakukan Gunpla Battle. Namun satu hari dia bertemu dengan seorang pencuri roti misterius, yang memberinya sebuah batu permata.</p>
    </div><br>
    <div style = "padding-left: 560px; padding-bottom:20px;" class = "spacebook">
        <div class = "fb-like" data-href = "http://animeindo.video/category/gundam-build-fighter/" data-width = "450" data-layout = "box_count" data-show-faces = "false" data-send = "false"></div>
    </div>
</div>"""

soup = BeautifulSoup(data, "html.parser")

# first locate the container with the desired fields
description = soup.find("h3", text = "Description:").find_next_sibling()

# get all the ":"-separated fields into a dictionary 
pattern = re.compile(r"\w+:\s.*?")

data = dict(field.split(":") for field in description.find_all(text=pattern))

print(data)

Распечатать:

{'Type': ' TV', 'Episodes': ' Unknown', 'Status': ' Currently Airing', 'Aired': ' Oct 7, 2013 to ?', 'Producers': ' Sunrise, TV Tokyo, Sotsu Agency', 'Genres': ' Mecha', 'Duration': ' 25 min. per episode'}

Теперь это не захватывает Synopsis, поскольку его значение находится в отдельном элементе p, но вы можете получить его через:

data["Synopsis"] = description.find("p", text = "Synopsis:").find_next_sibling("p").get_text()

Полный предустановленный вывод:

{'Aired': ' Oct 7, 2013 to ?',
 'Duration': ' 25 min. per episode',
 'Episodes': ' Unknown',
 'Genres': ' Mecha',
 'Producers': ' Sunrise, TV Tokyo, Sotsu Agency',
 'Status': ' Currently Airing',
 'Synopsis': 'Gundam Build Fighter adalah sebuah pertarungan simulasi Gundam. '
             'Unit Gundam dirangkai dari model plastiknya. Tokoh utamanya '
             'adalah seorang anak laki-laki yang bernama Iori Sei. Sei '
             'memiliki kemampuan merangkai Gundam yang hebat, namun dia tak\n'
             '            memiliki kemampuan untuk mengendalikan gundam yang '
             'ia rangkai saat melakukan Gunpla Battle. Namun satu hari dia '
             'bertemu dengan seorang pencuri roti misterius, yang memberinya '
             'sebuah batu permata.',
 'Type': ' TV'}

Здесь мы использовали несколько приемов, ниже приведены ссылки документации на соответствующий раздел документации библиотеки. Обязательно посмотрите его, чтобы лучше понять эти функции:

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