Разбор транскрипта mov ie с BeautifulSoup - Как игнорировать теги, вложенные в текст? - PullRequest
0 голосов
/ 25 марта 2020

Я использую BeautifulSoup для анализа транскрипта mov ie, который выглядит следующим образом:

<b>A</b>: Look!
<br/>
<b>B</b>: (<i>whispers</i>) Shhh. Be quiet.
<br/>
<b>A</b>: (<i>lowering voice</i>) Sorry.
<br/>

Я попытался получить все диалоги символа А, используя этот код:

page = requests.get(URL)
soup = BeautifulSoup(page.content, 'html.parser')

A_entire_dialogue = []

A_lines = soup.find_all('b', string='A')
for line in A_lines:
    dialogue = line.nextSibling
    A_entire_dialogue.append(dialogue)

# Code above returns [': Look!', ': ('] 

Я хочу вывести направления символов внутри тегов i вместе с остальным текстом диалога. Как я могу отредактировать код, чтобы получить результат [': Look!', ': (Понижающий голос) Извините.']?

EDIT: Спасибо за вашу помощь! Все ваши ответы работают для предоставленного фрагмента HTML, но я закончил тем, что написал свой собственный код, который лучше работает для анализа всей записи:

A_entire_dialogue = []

for i in soup.find_all('b', string='A'):
    for sib in i.next_siblings:
        if sib.name == None: 
            A_entire_dialogue.append(sib)
        elif sib.name == 'i':
            A_entire_dialogue.append(sib.get_text())
        elif sib.name == 'br':
            break
        else:
            print("Note: new tag not previously encountered.")
            break

Ответы [ 2 ]

1 голос
/ 25 марта 2020

Пожалуйста, проверьте это.

from bs4 import BeautifulSoup

page = """
<b>A</b>: Look!
<br/>
<b>B</b>: (<i>whispers</i>) Shhh. Be quiet.
<br/>
<b>A</b>: (<i>lowering voice</i>) Sorry.
<br/>
"""


soup = BeautifulSoup(page, 'html.parser')

A_entire_dialogue = []

for text in soup.text.split("\n"):
    if text and text.startswith("A"):
        A_entire_dialogue.append(text[1:])

print(A_entire_dialogue)

Вывод:

[': Look!', ': (lowering voice) Sorry.']
0 голосов
/ 25 марта 2020

Другое решение.

from simplified_scrapy import SimplifiedDoc
html = '''
<b>A</b>: Look!
<br/>
<b>B</b>: (<i>whispers</i>) Shhh. Be quiet.
<br/>
<b>A</b>: (<i>lowering voice</i>) Sorry.
<br/>
'''
doc = SimplifiedDoc(html)
A_lines = doc.getElementsByReg("A",tag="b").nextText(end="<br />")
print (A_lines)

Результат:

[': Look!', ': (lowering voice) Sorry.']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...