2015-09-05 55 views
-1

據我所知,BeautifulSoup和lxml能夠提取html元素的dom結構。但我想自己做,因爲我需要一個沒有庫存限制的高性能爬蟲。所以有沒有一種「簡單」的方式來提取html元素的DOM結構而不使用Python庫?

是否有一種「簡單」的方式來提取html元素的dom結構而不使用python庫?

我問這是因爲我想通過僅在網站的前端搜索來查找html元素,然後在知道我想要哪個元素之後,我需要此元素的dom路徑。

例如,計算器標誌的此頁面上的DOM路徑是:

html > body.ask-page.new-topbar > div.container > div#header > div#logo > a 
+0

您需要*東西*實現[HTML5解析器算法](https://html.spec.whatwg.org/multipage/syntax.html#parsing)。你當然可以* *實現一個自己比Python更高性能的語言,準確地提供你想要的API,然後將其包裝成Python的,但它是一個可怕的很多工作...... – zwol

回答

1

HTML是一種上下文無關文法並沒有保證一個給定的HTML響應將是有效的XML明智的(例如,一個清晰的標籤層次結構和一切具有匹配的結束標籤)文檔結構部分由瀏覽器猜測,部分使用特定規則創建,如果標籤全部搞亂而不在層次結構中。

如果你真的想編寫自己的HTML解析庫,你的例子是限制在一個非常特殊類型的文本要匹配(這樣粗的正則表達式不會幫助),然後再考慮下面的HTML片段,您可以嘗試,並找出了DOM結構:

讓我們開始與<p>猜測:

<p>blah blah 
<p>blah blah 
<p>blah blah 
<p>blah blah <img src="a.jpg"> <!-- where is this image? --> 

怎麼樣畸形的結束標記順序?

<a href="test.html"><img src="a.jpg"> <b>this is a cool image </a></b> 

如何將錯誤的內容類型嵌套在一起?

<p>blah blah <div class="button"><img src="derp.png"></div></p> 

在這個例子中<p><div>開始之前被關閉,因爲<p>不接受它flow content

但是,像美麗的圖書館已經配備瞭解析所有這些可怕的玩意兒和更多。

相關問題