大部分的新聞網站,其新聞正文是在 p 標籤中的。因此 GNE 在統計文本標籤密度時,會考慮 p 標籤的數量和 p 標籤中文本的數量。html
可是也有一些網站,他們的新聞正文是在 div 標籤中的,這種狀況下,這些 div 標籤就會干擾文本標籤密度的計算。node
div 標籤在 HTML 頁面佈局時有很大的做用,不能隨意改動。可是,若是一個 div 標籤它下面只有文本,沒有任何子標籤,那麼這個 div 標籤和 p 標籤沒有什麼本質區別。這種狀況下,能夠把這些 div 標籤轉換爲 p 標籤。python
基於這個原理,GNE 設計了以下的邏輯:git
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'
複製代碼
運行效果以下圖所示:github
其中,node.getchildren()
用於獲取當前節點的全部直接子節點。佈局
整個修改 div 標籤的過程,會直接修改Element 對象,不須要返回。網站
GNE 的其餘關鍵技術,將會在接下來的文章中逐一放出,你也能夠訪問 GNE 的 Github 主頁:github.com/kingname/Ge…,提早閱讀項目源代碼。spa