我通過抓取網站以 html 格式存盤了文本,因此它只包含標題和段落。
從我的 html 結構如下:
<h2> header one </h2>
<p> some text </p>
<p> some more text </p>
<h2> header two </h2>
.
.
<h2> header three </h2>
我需要獲得如下所示的單獨資料集:
資料集1:
<h2> header one </h2>
<p> some text </p>
<p> some more text </p>
資料集2:
<h2> header two </h2>
<p> some text </p>
<p> some more text </p>
我想過將內容決議為文本并使用正則運算式分隔符分隔,但我無法確定標題標簽內的文本不在段落標簽內。
有沒有什么辦法可以將來自給定標簽的后續資料存盤到這樣的相同型別的下一個標簽?
uj5u.com熱心網友回復:
不確定這是否是最有效的方法,但獲取所有<h2>標簽。然后遍歷這些。當你這樣做時,你可以得到所有的.next_siblings并迭代它們。當您點擊下一個<h2>標簽時,打破該回圈。如果你得到一個<p>標簽,把它轉儲到一個串列中(或者你想要的任何東西)。
因此,這將創建一個串列串列,其中根中的每個元素都是您的磁區資料集:
html = '''<h2> header one </h2>
<p> some text </p>
<p> some more text </p>
<h2> header two </h2>
<p> some text2 </p>
<p> some more text2 </p>
<p> and some more text2 </p>
<h2> header three </h2>
<p> some text3 </p>'''
from bs4 import BeautifulSoup
data = []
soup = BeautifulSoup(html, 'html.parser')
h2s = soup.find_all('h2')
for h2 in h2s:
temp_data = [h2]
for tag in h2.next_siblings:
if tag.name == 'h2':
break
elif tag.name == 'p':
temp_data.append(tag)
data.append(temp_data)
輸出:
for item in data:
print(f'{item}')
[<h2> header one </h2>, <p> some text </p>, <p> some more text </p>]
[<h2> header two </h2>, <p> some text2 </p>, <p> some more text2 </p>, <p> and some more text2 </p>]
[<h2> header three </h2>, <p> some text3 </p>]
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/365331.html
