GNE預處理技術——把 div 標籤中的正文轉移到 p 標籤中

大部分的新聞網站,其新聞正文是在 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

相關文章
相關標籤/搜索