深度剖析使用python抓取网页正文的源码 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

   

    本方法是基于文本密度的方法,最初的想法来源于哈工大的《基于行块分布函数的通用网页正文抽取算法》,本文基于此进行一些小修改,

深度剖析使用python抓取网页正文的源码

    约定:

    本文基于网页的不同行来进行统计,因此,假设网页内容是没有经过压缩的,就是网页有正常的换行的。

    有些新闻网页,可能新闻的文本内容比较短,但其中嵌入一个视频文件,因此,我会给予视频较高的权重;这同样适用于图片,这里有一个不足,应该是要根据图片显示的大小来决定权重的,但本文的方法未能实现这一点。

    由于广告,导航这些非正文内容通常以超链接的方式出现,因此文本将给予超链接的文本权重为零。

    这里假设正文的内容是连续的,中间不包含非正文的内容,因此实际上,提取正文内容,就是找出正文内容的开始和结束的位置。

    步骤:

    首先清除网页中CSS,Javascript,注释,Meta,Ins这些标签里面的内容,清除空白行。

    计算每一个行的经过处理的数值(1)

    计算上面得出的每行文本数的最大正子串的开始结束位置

    其中第二步需要说明一下:

    对于每一行,我们需要计算一个数值,这个数值的计算如下:

    一个图片标签img,相当于出现长度为50字符的文本 (给予的权重),x1,

    一个视频标签embed,相当于出现长度为1000字符的文本, x2

    一行内所有链接的标签 a 的文本长度 x3 ,

    其他标签的文本长度 x4

    每行的数值 = 50 * x1其出现次数 + 1000 * x2其出现次数 + x4 – 8

    //说明, -8 因为我们要计算一个最大正子串,因此要减去一个正数,至于这个数应该多大,我想还是按经验来吧。

    完整代码

    复制代码代码如下:

    #coding:utf-8

    import re

    def remove_js_css (content):

    """ remove the the javascript. and the stylesheet and the comment content (....) """

    r = re.compile(r'''''',re.I|re.M|re.S)

    s = r.sub ('',content)

    r = re.compile(r'''''',re.I|re.M|re.S)

    s = r.sub ('', s)

    r = re.compile(r'''''', re.I|re.M|re.S)

    s = r.sub('',s)

    r = re.compile(r'''''', re.I|re.M|re.S)

    s = r.sub('',s)

    r = re.compile(r'''''', re.I|re.M|re.S)

    s = r.sub('',s)

    return s

    def remove_empty_line (content):

    """remove multi space """

    r = re.compile(r'''^\s+$''', re.M|re.S)

    s = r.sub ('', content)

    r = re.compile(r'''\n+''',re.M|re.S)

    s = r.sub('\n',s)

    return s

    def remove_any_tag (s):

    s = re.sub(r'''<[^>]+>''','',s)

    return s.strip()

    def remove_any_tag_but_a (s):

    text = re.findall (r''']*>(.*?)''',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 < 0):

    cur_max = 0

    for i in range(right, -1, -1):

    glo_max -= values[i]

    if abs(glo_max < 0.00001):

    left = i

    break

    return left,right+1

    def method_1 (content, k=1):

    if not content:

    return None,None,None,None

    tmp = content.split('\n')

    group_value = []

    for i in range(0,len(tmp),k):

    group = '\n'.join(tmp[i:i+k])

    group = remove_image (group)

    group = remove_video (group)

    text_a,text_b= remove_any_tag_but_a (group)

    temp = (text_b - text_a) - 8

    group_value.append (temp)

    left,right = sum_max (group_value)

    return left,right, len('\n'.join(tmp[:left])), len ('\n'.join(tmp[:right]))

    def extract (content):

    content = remove_empty_line(remove_js_css(content))

    left,right,x,y = method_1 (content)

    return '\n'.join(content.split('\n')[left:right])

    代码 从最后一个函数开始调用,

电脑资料

深度剖析使用python抓取网页正文的源码》(https://www.unjs.com)。

   

您可能感兴趣的文章:

python小技巧之批量抓取美女图片

python抓取网页图片示例(python爬虫)

Python使用代理抓取网站图片(多线程)

python抓取网页中的图片示例

python使用beautifulsoup从爱奇艺网抓取视频播放

Python代理抓取并验证使用多线程实现

python 自动提交和抓取网页

    QQ空间 搜狐微博 人人网 开心网 百度搜藏更多

    Tags:python 抓取网页正文

    复制链接收藏本文打印本文关闭本文返回首页

    上一篇:python k-近邻算法实例分享

    下一篇:windows下wxPython开发环境安装与配置方法

   

相关文章

2014-03-03pyqt4教程之实现半透明的天气预报界面示例

2014-02-02下载给定网页上图片的方法

2013-09-09python pickle 和 shelve模块的用法

2008-04-04python远程登录代码

2014-06-06Python中字典(dict)和列表(list)的排序方法实例

2013-01-01python设置windows桌面壁纸的实现代码

2011-03-03python 中文乱码问题深入分析

2013-11-11使用setup.py安装python包和卸载python包的方法

2014-06-06浅析python 内置字符串处理函数的使用方法

2014-05-05Python tempfile模块学习笔记(临时文件)

   

文章评论

   

最 近 更 新

   

python 实现堆排序算法代码

Python 代码性能优化技巧分享

netbeans7安装python插件的方法图解

python爬取网站数据保存使用的方法

ptyhon实现sitemap生成示例

paramiko模块安装和使用(远程登录服务器)

python操作数据库之sqlite3打开数据库、删

python自动安装pip

python list 合并连接字符串的方法

Python 学习笔记

   

热 点 排 行

   

Python入门教程 超详细1小时学会

python 中文乱码问题深入分析

比较详细Python正则表达式操作指

Python字符串的encode与decode研

Python open读写文件实现脚本

Python enumerate遍历数组示例应

Python 深入理解yield

Python+Django在windows下的开发

python 文件和路径操作函数小结

python 字符串split的用法分享

最新文章