使用BeautifulSoup解析电影成绩单-如何忽略文本中嵌套的标记?
我正在使用BeautifulSoup解析一个电影成绩单,如下所示:使用BeautifulSoup解析电影成绩单-如何忽略文本中嵌套的标记?,beautifulsoup,Beautifulsoup,我正在使用BeautifulSoup解析一个电影成绩单,如下所示: <b>A</b>: Look! <br/> <b>B</b>: (<i>whispers</i>) Shhh. Be quiet. <br/> <b>A</b>: (<i>lowering voice</i>) Sorry. <br/> 我想把I标签中的字符方向与对话文本的
<b>A</b>: Look!
<br/>
<b>B</b>: (<i>whispers</i>) Shhh. Be quiet.
<br/>
<b>A</b>: (<i>lowering voice</i>) Sorry.
<br/>
我想把I标签中的字符方向与对话文本的其余部分一起拉出来。如何编辑代码,使结果为[':Look!',':(低声)对不起]
编辑:谢谢你的帮助!您的所有答案都适用于提供的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
请检查这个
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)
另一个解决方案
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)
我不知道BeautifulSoup,但是你不应该一直拉兄弟姐妹直到到达
元素,而不是只拉第一个兄弟姐妹吗?尝试将此HTML绘制为一棵树。@JamesMcLeod谢谢!我对编码还不熟悉,没有意识到这是一种选择,但多亏了你的建议,我才明白这一点。
[': Look!', ': (lowering voice) Sorry.']
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.']