我使用Beutifulsoup 4和Python 3.5+提取webdata。我有以下的HTML,從中我解壓:隨着Beautifulsoup,除了那些指定的元素提取標籤
<div class="the-one-i-want">
<p>
content
</p>
<p>
content
</p>
<p>
content
</p>
<p>
content
</p>
<ol>
<li>
list item
</li>
<li>
list item
</li>
</ol>
<div class='something-i-don't-want>
content
</div>
<script class="something-else-i-dont-want'>
script
</script>
<p>
content
</p>
</div>
所有這一切我想提取是<div class="the-one-i-want">
元素中發現的內容。現在,我使用下面的方法,其工作的大部分時間:
soup = Beautifulsoup(html.text, 'lxml')
content = soup.find('div', class_='the-one-i-want').findAll('p')
這不包括腳本,怪異插入div
的否則不可預測的內容,如廣告或‘推薦內容’類型的東西。
現在,有些情況下,除了<p>
標記之外,其他元素的內容對於主要內容(如列表)具有上下文重要性。
是否有一種方式來獲得從<div class="the-one-i-want">
的方式,因爲這樣的內容:
soup = Beautifulsoup(html.text, 'lxml')
content = soup.find('div', class_='the-one-i-want').findAll(desired-content-elements)
凡desired-content-elements
將是包容性的,我認爲適合特定內容的每一個元素的?如全部爲<p>
標籤,全部爲<ol>
和<li>
標籤,但沒有<div>
或<script>
標籤。
也許值得一提的,是我保存內容的方法:
content_string = ''
for p in content:
content_string += str(p)
這種方法收集的數據,在出現的命令,這將被證明是難以管理,如果我只是通過不同的迭代過程中發現的不同的元素類型。如果可能的話,我希望不必管理拆分列表的重新構建,以重新組裝內容中最初發生的每個元素的順序。
工程就像一個魅力,感謝您的幫助@ padraic – theeastcoastwest