我试图从2012年奥巴马-罗姆尼总统辩论中摘录一些话。问题是the site组织得不好。结构如下:
<span class="displaytext">
<p>
<i>OBAMA</i>Obama's first quotes
</p>
<p>More quotes from Obama</p>
<p>Some more Obama quotes</p>
<p>
<i>Moderator</i>Moderator's quotes
</p>
<p>Some more quotes</p>
<p>
<i>ROMNEY</i>Romney's quotes
</p>
<p>More quotes from Romney</p>
<p>Some more Romney quotes</p>
</span>
有没有办法选择一个<p>
的第一个孩子是一个i
有文本的OBAMA
和它的所有p
兄弟姐妹,直到你碰到下一个p
的孩子,他的第一个孩子是一个i
没有文本的Obama
这是我到目前为止所做的尝试,但它只是抓住了第一个p
,忽略了兄弟姐妹
input = '''<span class="displaytext">
<p>
<i>OBAMA</i>Obama's first quotes
</p>
<p>More quotes from Obama</p>
<p>Some more Obama quotes</p>
<p>
<i>Moderator</i>Moderator's quotes
</p>
<p>Some more quotes</p>
<p>
<i>ROMNEY</i>Romney's quotes
</p>
<p>More quotes from Romney</p>
<p>Some more Romney quotes</p>
</span>'''
soup = BeautifulSoup(input)
debate_text = soup.find("span", { "class" : "displaytext" })
president_quotes = debate_text.find_all("i", text="OBAMA")
for i in president_quotes:
siblings = i.next_siblings
for sibling in siblings:
print(sibling)
只打印Obama's first quotes
我认为一种类似于finite state machine的解决方案会在这里起作用。像这样:
其他的Obama引号是
p
的兄弟姐妹,而不是i
,因此您需要找到i
的父母的兄弟姐妹。当您在这些兄弟姐妹之间循环时,您可以在有i
时停止。像这样:打印内容:
相关问题 更多 >
编程相关推荐