Извлечение текста из нескольких стилей DIVS DIV с помощью Python / BeautifulSoup

#python #html #beautifulsoup

#python #HTML #beautifulsoup

Вопрос:

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

У меня есть следующий HTML:

 <section id="content4" class="tab-content"&&t;
                                                    <p&&t;
    <div class="Text_Title"&&t;Product 1</div&&t;
    <div style="display: inline-block;"&&t;Red Ball<div&&t;</p&&t;
                                                    <p&&t;
    <div class="Text_Title"&&t;Product 2</div&&t;
    <div style="display: inline-block;"&&t;Green Ball</div&&t;</p&&t;
                                                    <p&&t;
    <div class="Text_Title"&&t;Product 3</div&&t;
    <div style="display: inline-block;"&&t;Yellow Ball</div&&t;</p&&t;
    
  

Я пытаюсь извлечь текст из DIV = Text_Title и STYLE = display: inline-block;

результат, который я пытаюсь получить:

 Product 1 - Red Ball
Product 2 - Green Ball
Product 3 - Yellow Ball
  

Ответ №1:

Используется findAll для извлечения списка объектов тегов, соответствующих заданным критериям, затем zip для параллельного выполнения итерации по итерируемому.

 from bs4 import BeautifulSoup

input_ = """<section id="content4" class="tab-content"&&t;
                                                    <p&&t;
    <div class="Text_Title"&&t;Product 1</div&&t;
    <div style="display: inline-block;"&&t;Red Ball<div&&t;</p&&t;
                                                    <p&&t;
    <div class="Text_Title"&&t;Product 2</div&&t;
    <div style="display: inline-block;"&&t;Green Ball</div&&t;</p&&t;
                                                    <p&&t;
    <div class="Text_Title"&&t;Product 3</div&&t;
    <div style="display: inline-block;"&&t;Yellow Ball</div&&t;</p&&t;"""

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

for x, y in zip(soup.findAll("div", attrs={"class": "Text_Title"}),
                soup.findAll("div", attrs={"style": "display: inline-block;"})):
    print(x.text, "-", y.text)
  

 Product 1 - Red Ball
Product 2 - Green Ball
Product 3 - Yellow Ball