攝影:產品經理
買單:kingname
大部分的新聞網站,其新聞正文是在 p 標籤中的。因此 GNE 在統計文本標籤密度時,會考慮 p 標籤的數量和 p 標籤中文本的數量。html
可是也有一些網站,他們的新聞正文是在 div 標籤中的,這種狀況下,這些 div 標籤就會干擾文本標籤密度的計算。node
div 標籤在 HTML 頁面佈局時有很大的做用,不能隨意改動。可是,若是一個 div 標籤它下面只有文本,沒有任何子標籤,那麼這個 div 標籤和 p 標籤沒有什麼本質區別。這種狀況下,能夠把這些 div 標籤轉換爲 p 標籤。ide
基於這個原理,GNE 設計了以下的邏輯:佈局
from lxml.html import fromstring, etree, HtmlElement from html import unescape def iter_node(element): yield element for sub_element in element: if isinstance(sub_element, HtmlElement): yield from iter_node(sub_element) selector = fromstring(html) for node in iter_node(selector): if node.tag.lower() == 'div' and not node.getchildren(): node.tag = 'p'
運行效果以下圖所示:網站
其中, node.getchildren()用於獲取當前節點的全部直接子節點。設計
整個修改 div 標籤的過程,會直接修改Element 對象,不須要返回。code
GNE 的其餘關鍵技術,將會在接下來的文章中逐一放出,你也能夠點擊下方閱讀原文,跳轉到 GNE 的 Github 主頁,提早閱讀項目源代碼。xml