技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 算法 --> 关于新闻网页正文抽取的一些思路

关于新闻网页正文抽取的一些思路

浏览:2618次  出处信息

A:估计很多人只想要简单快速地实现正文抽取,我特地将PHP版本的调用示例给了出来,并打包提供下载:demo.tar;

B:希望自行实现的朋友可以顺这两个思路来实现:

i):链接密度算法:简单点说,就是统计每一个HTML子节点的链接密度,然后找出链接密度最小的那个点;对于中文新闻网页,这个密度值通常是0.03到0.05这个范围内,个别站点可能超出这个范围;当然你可以综合一下文本长度等等因素来考虑;网上有位达人写了一份python版的程序,可以考虑借鉴一下,源程序在这里:textextract.tar,调用第一个函数即可;使用时,如果返回的内容比实际的小,说明要将密度值调大一点,反之要调小一点;

附注:链接密度:处于链接中的文字中的长度除以整段文字的长度;

ii):HTML Tag打分算法:只能提供一些零散的要素点:

(不介绍正则模板类方法了,这个就太没意思了)

首先很多节点可以直接去掉,比如script,style,from,iframe,object或embed,这些多半不是正文,直接干掉;注释也去掉,它们带入处理,只会浪费内存;

再干掉很多HTML属性,像width,height,cellspacing,cellpadding,style,class这些都直接干掉;

一些节点可以保留文本内容,把HTML节点去掉;比如Span,Font,b 标记节点;

在主流的新闻网页(我们暂且把这个集合定义为:news.sina.com.cn,news.sohu.com,news.cn.yahoo.com,news.qq.com,news.163.com)中,一般来说可能是正文内容的就是DIV这两个标签了,DIV的可能性更大一些;正文内容往往放在一个DIV标记中;而且这些网站有着严格的编辑管理规范,一般都会规定,用来表现段落,也存在可能某些编辑队伍要求用两个来表现新段落的,这样,我们先将两个BR换成P,然后查找拥有多个段落的DIV节点;

“枝”节点和”页”节点的分类:通常来说,div,p,table,h1,h2…h6,ul,li,ol,form这些都可以为是枝干;而 A,img,input,button这些标签我们都视做为”叶子”节点;这里有很多小规则可以应用,比如网页的正文不会包括在一个A当中:哪个CMS的模板会把大段正文放在一个A标记中呢?同样地,像input,button这些一般也不会出现在正文中.

目标链接超长的的,一般是广告链接:像

以下是引用片段:
http://sina.allyes.com/main/adfclick?db=sina&bid=147826,186360,191333&cid=0,0,0&sid=179037&advid=3406&camid=25434&show=ignore&url=http://tech.sina.com.cn/iPhone/

以下是引用片段:
http://sohu.ad-plus.cn/event.ng/Type=click&FlightID=201006&TargetID=sohu&Values=fe5172f2,7a850001,a3827680,0fba7427&AdID=66817

这些,都是广告链接;带googleadsence,doubleclick,allyes等链接,也是广告,也排除掉;

去除HTML后,整段文字无标点的,一般是导航或是相关链接什么的;比如sohu的页面上某一段抽出正文后是:“搜狐首页-新闻-体育-S-娱乐-V-财经-IT-汽车-房产-家居-女人-视频-播客-微博-邮件-博客-BBS-我说两句-搜狗” 这个,没有逗号也没有句号,多半是导航;这个导航还可以按照每个链接的平均文字长度来算,平均每个链接的长度在2~4之间的,不用想了,是导航链接,挨着一排链接平均长度在10-20左右的,多半是相关文章了;

另外还有一些其他的小伎俩:比如说,门户网站的广告发布,流程很复杂的,所以一般情况下,广告链接所用的域名都是固定的,比如可能就是sina.allyes.com,或是sohu.doubleclick.com(这两个域名我瞎写的,真实情况下可能和这差不太多);广告位置一般不太换(收了钱的,也不能随便换的);另外到正文的链接一般是本域名的完整URL,不会是相对URL,也一般不会出现其他站的链接,如果有,多半是收费文字链(页脚可能会有政府机关的链接,不过相信一上来你就有办法判断出哪个是尾巴了);

综合一下两种方法,要写出一个针对主流的,常见的新闻网页的抽取程序,那就很好办了.

至于标题提取,这个就太简单了,随便拿篇新闻做例子:比如这篇:http://news.sohu.com/20100706/n273301825.shtml,查看一下源代码,其中有:

真是太好做了,一般新闻网站的title属性就是{标题}-{网站名}{频道}的形式,要处理非常简单.

Ok,放出你的爬虫前,请先确认有相关新闻资质;注意,本文绝不鼓励侵权转载,嗯;本文只是介绍一下大致实现信息结构化的一个思路而已.做垃圾站真的是一个很没前途的职业的:(

建议继续学习:

  1. 使用python爬虫抓站的一些技巧总结:进阶篇    (阅读:6418)
  2. 使用Perl的HTML::TreeBuilder::XPath来解析网页内容    (阅读:3896)
  3. 新闻站抓取神器:正文抽取接口    (阅读:3216)
  4. php抓取页面与代码解析    (阅读:2981)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1