Извлечение текста внутри тега <b>и <div>отдельно с использованием Beautiful soup - PullRequest
0 голосов
/ 15 марта 2020
<div class="quote">
    <b>Head 1</b> Text 1
</div>
<div class="quote">
    <b>Head 2</b> Text 2
    <br/> <b>Head 3</b> Text 3
</div>    

Мне нужно извлечь голову 1, голову 2, голову 3 отдельно и текст 1, текст 2, текст 3 отдельно. Я попытался сделать это таким образом, но только глава 1, глава 2 извлекается со всем текстом (включая голову 1, голову 2) класса div. PS количество вложенных тегов b может варьироваться в зависимости от класса div. Мне нужно перебрать все элементы div class = 'quote' на странице

def parser(url):
    page_content=BeautifulSoup(url.content,'html.parser')
    df=pd.DataFrame(columns=['Dialogues','Character'])
    for item in page_content.findAll('div',{'class':'quote'}):
            character= item.find('b').text[:-1]
            quotes=item.text
            df=df.append({'Dialogues':quotes,'Character': character},ignore_index=True)

    return df

РЕДАКТИРОВАТЬ Мне нужны данные в двух отдельных столбцах df в таком формате.

Character   Quote
Head 1  Text 1
Head 2  Text 2
Head 3  Text 3

1 Ответ

0 голосов
/ 15 марта 2020

Попробуйте следующим образом:

targets = page_content.select('div.quote')
for target in targets:
    for s in target.stripped_strings:
        print(s)

Вывод:

Head 1
Text 1
Head 2
Text 2
Head 3
Text 3

Редактировать:

Чтобы добавить к фрейму данных:

import pandas as pd
heads = []
tails = []
targets = page_content.select('div.quote')
for target in targets:
    data = target.stripped_strings
    mu = list(data)
    for i in range(0,len(mu),2):
        heads.append(mu[i])
        tails.append(mu[i+1])

items = list(zip(heads,tails))
pd.DataFrame(items, columns=['Character','Quote'])

Вывод:

    Character   Quote
0   Head 1  Text 1
1   Head 2  Text 2
2   Head 3  Text 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...