当前位置:  编程技术>python

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

    来源: 互联网  发布时间:2014-10-08

    本文导语:  本方法是基于文本密度的方法,最初的想法来源于哈工大的《基于行块分布函数的通用网页正文抽取算法》,本文基于此进行一些小修改。 约定:       本文基于网页的不同行来进行统计,因此,假设网页内容是没有经过...

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

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

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

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

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

步骤:

       首先清除网页中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 (.... and .... ) """
    r = re.compile(r'''


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 纯C语言:检索与周游广度深度遍历源码分享
  • 请问下,TCQ/NCQ的队列深度是硬盘决定的吧?如何获取深度值呢?谢谢!
  • 深入JAVA对象深度克隆的详解
  • jQuery 记录滚动深度的插件 Scroll Depth
  • 深度理解try{}cathc(){}
  • 深度游戏中心
  • 50分求与【Linux 服务器 配置维护,网站架设】相关深度中等偏下的经典书籍,荐者有分!
  • 迅速确定php多维数组的深度的方法
  • 在Solaris上显示xpm格式的图片,为什么显示的效果好象是位图深度不够似的?
  • 深度复制是否会内存泄漏?
  • C语言实现计算树的深度的方法
  • 快来救命啊。EJB调用EJB问题。深度郁闷,高分相送。
  • 请教:linux下的有名管道 fifo深度多大?
  • 一个有深度的问题(对信号量操作不熟者请勿进)
  • C++深度优先搜索的实现方法
  • 深度分析mysql GROUP BY 与 ORDER BY
  • 解析JAVA深度克隆与浅度克隆的区别详解
  • Java Web项目前端规范(采用命名空间使js深度解耦合)
  • 深度分析正则(pcre)最大回溯/递归限制
  • SQLSERVER的非聚集索引结构深度理解
  • 深度揭露Oracle索引使用中的限制


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3