我正在尝试使用Beautiful Soup提取一些文本。相关部分看起来像这样。
...
<p class="consistent"><strong>RecurringText</strong></p>
<p class="consistent">Text1</p>
<p class="consistent">Text2</p>
<p class="consistent">Text3</p>
<p class="consistent"><strong>VariableText</strong></p>
...
RecurringText,顾名思义,在所有文件中都是一致的。但是,VariableText会发生变化。它唯一的共同点是它是下一个编码部分。我想得到Text1,Text2和Text3提取。之前(包括RecurringText)以及之后(包括和包含VariableText之后)的内容可以留下。我在其他地方发现了RecurringText的提取部分,但如果有意义,我不确定如何删除下一个项目。
总而言之,我如何根据VariableText的特性(字符串在整个网址中是可变的)提取,一直在Text1,Text2,...,Textn的最后一项之后(其中n在文件之间是不同的)
答案 0 :(得分:1)
您基本上可以从包含p
元素的strong
元素到包含p
元素的另一个strong
元素获取项目:
from bs4 import BeautifulSoup
data = """
<div>
<p class="consistent"><strong>RecurringText</strong></p>
<p class="consistent">Text1</p>
<p class="consistent">Text2</p>
<p class="consistent">Text3</p>
<p class="consistent"><strong>VariableText</strong></p>
</div>
"""
soup = BeautifulSoup(data, "html.parser")
for p in soup.find_all(lambda elm: elm and elm.name == "p" and elm.text == "RecurringText" and \
"consistent" in elm.get("class") and elm.strong):
for item in p.find_next_siblings("p"):
if item.strong:
break
print(item.text)
打印:
Text1
Text2
Text3