我想从使用<br>
的网站获取一些数据。在使用beautifulsoup4解析的html中,有时我有以下模式:
"<p class=some_class>text_1. text_2 (text_3<span class=GramE>)</span>
<br>
text_4,<span style='mso-fareast-font-family:"Arial Unicode MS"'>
</span>text_5.</p>"
但如果网站以更好的方式编写,它看起来像:
"<p class=some_class>text_1. text_2(text_3<span class=GramE>)</span
</p> <p class=some_class>
text_4,<span style='mso-fareast-font-family:"Arial Unicode MS"'>
</span>text_5.</p>
要提取我想要的字符串,我会提取每个<p>
中的所有文本。但是,现在我要分离的字符串由<br>
分隔。
我的问题如下:我如何使用<br>
来解开我感兴趣的字符串部分?我的意思是,我想要像[text_1.+text_2+text_3, text_4+text_5.]
这样的东西。
我明确询问<br>
的使用,因为我发现的唯一元素是分隔我感兴趣的字符串。此外,在网站的其他部分,我有<br/>
分离我感兴趣的字符串,而不是<br>
。
我无法通过使用replace()函数来解决这个问题,因为我的对象是标签froom bs4。另外,使用bs4中的find(“br”)给我“<br/>
”而不是我想要的文字。通过这种方式,这个question的答案并不完全是我想要的。我认为一种方法是将标签从bs4转换为html,然后使用replace()函数更改“<br/>
”,最后将其转换回bs4元素。但是,我不知道如何进行此更改,我还想知道是否有更简单,更短的方法来执行此操作。
这是我发现的一个解决方案,但由于它没有使用bs4的任何功能,所以它很长且效率很低。虽然,它有效。
html_doc = """
"<p class=some_class>text_1. text_2 (text_3<span class=GramE>)</span>
<br>
text_4,<span style='mso-fareast-font-family:"Arial Unicode MS"'>
</span>text_5.</p>"
"""
def replace_br(soup_object):
html1=str(soup_object)
html1=html1.replace("<br>", "</p> <p>")
soup_html1 = BeautifulSoup(html1, 'html.parser')
return soup_html1.find_all("p")
replace_br(html_doc)
[<p class="some_class">text_1. text_2 (text_3<span class="GramE">)</span>
</p>, <p>
text_4,<span style='mso-fareast-font-family:"Arial Unicode MS"'>
</span>text_5.</p>]