抓取网页音频(如何从一个网页中提取出文章的正文正文内容?)
优采云 发布时间: 2021-10-07 21:35抓取网页音频(如何从一个网页中提取出文章的正文正文内容?)
通常打开一个网页,除了文章的正文内容,通常还会有很多导航、广告等信息。这个博客的目的是解释如何从网页中提取文章的正文内容,同时转出其他不相关的信息。
我们先来看看demo:
此方法基于文本密度。最初的想法来自哈尔滨工业大学的《基于行块分布函数的通用网页文本提取算法》。本文在此基础上做了一些小的修改。
习俗:
本文根据网页的不同行进行统计。因此,假设网页的内容没有被压缩,则说明网页有正常的换行符。
对于一些新闻页面,新闻的文字内容可能比较短,但是里面嵌入了一个视频文件。因此,我会给视频更高的权重;这也适用于图片。这里有一个缺点。它应该基于图片的大小。确定权重,但本文的方法未能做到这一点。
因为广告,这些非文字内容的导航通常以超链接的形式出现,所以文字会给超链接的文字权重为零。
假设正文的内容是连续的,不收录非文本内容。所以,其实提取正文就是找出正文的起止位置。
步:
首先清除网页中的CSS、Javascript、评论、Meta、Ins标签中的内容,清除空白行。
计算每一行的处理值(1)
计算上面得到的每行文本数的最大正子串的起止位置
第二步需要说明:
对于每一行,我们需要计算一个值,计算如下:
一个图片标签img,相当于一个长度为50个字符(给定权重)x1的文本,
嵌入的视频标签,相当于 1000 个字符的文本,x2
一行 x3 中所有链接的标签 a 的文本长度,
其他标签的文本长度 x4
每行的值 = 50 * x1 它的出现次数 + 1000 * x2 它的出现次数 + x4-8
//说明,-8 因为我们要计算一个最大的正子串,所以需要减去一个正数。至于这个数字应该有多大,我觉得还是用经验比较好。
完整代码
<p>#coding:utf-8
import re
def remove_js_css (content):
""" remove the the javascript and the stylesheet and the comment content (.... and .... ) """
r = re.compile(r\'\'\'\'\'\',\'\',s)
return s.strip()
def remove_any_tag_but_a (s):
text = re.findall (r\'\'\']*>(.*?)</a>\'\'\',s,re.I|re.S|re.S)
text_b = remove_any_tag (s)
return len(\'\'.join(text)),len(text_b)
def remove_image (s,n=50):
image = \'a\' * n
r = re.compile (r\'\'\'\'\'\',re.I|re.M|re.S)
s = r.sub(image,s)
return s
def remove_video (s,n=1000):
video = \'a\' * n
r = re.compile (r\'\'\'\'\'\',re.I|re.M|re.S)
s = r.sub(video,s)
return s
def sum_max (values):
cur_max = values[0]
glo_max = -999999
left,right = 0,0
for index,value in enumerate (values):
cur_max += value
if (cur_max > glo_max) :
glo_max = cur_max
right = index
elif (cur_max