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