我颳了所有具有相似格式的多個頁面,但它在這裏和那裏稍微變化,並且沒有用於搜索我需要的類。Beautifulsoup基於nextSibling標記名稱獲取文本
的格式如下:
<div id="mainContent">
<p>Some Text I don't want</p>
<p>Some Text I don't want</p>
<p>Some Text I don't want</p>
<span> More text I don't want</span>
<ul>...unordered-list items..</ul>
<p>Text I WANT</p>
<ol>...ordered-list items..</ol>
<p>Text I WANT</p>
<ol>...ordered-list items..</ol>
</div>
有序/無序列表和其他標籤的變化取決於在頁面上的數量,但什麼保持不變的是我總是想從<p>
標籤是文本<ol>
標記的前一個兄弟。
我想要什麼(不工作)是:
main = soup.find("div", {"id":"mainContent"})
for d in main.children:
if d.name == 'p' and d.nextSibling.name == 'ol':
print(d.text)
else:
print("fail")
的放出來的,這是fail
每次迭代。在試圖弄清楚這是爲什麼不工作我想:
for d in main.children:
if d.name == 'p':
print(d.nextSibling.name)
else:
print("fail")
這樣做的輸出是一樣的東西:
fail
None
fail
None
fail
None
fail
fail
fail
fail
fail
None
fail
等等
這是爲什麼不喜歡工作我認爲會呢?如果下一個標籤是<ol>
,我怎樣才能從<p>
元素只得到?
啊哈!謝謝。我發現我可以通過使用'if d.nextSibling.nextSibling.name =='ol'來準確找到它:'但我無法弄清楚爲什麼我必須去兩個兄弟姐妹才能獲得下一個兄弟姐妹。 – DjH
是的,在這種情況下,這也會起作用。但是,如果只遍歷兩個兄弟姐妹是不夠的?因爲'html'可能是不可預知的。我認爲在這裏檢查對象類型是個好主意。 –
我絕對同意。謝謝 – DjH