14
回答
对网页正文自动的抓取研究及简单实现方法
百度AI开发者大赛带你边学边开发,赢100万奖金,加群:418589053   

请各位看官轻拍。。。

我一直对网页内容的抓取非常感兴趣,大概的三年前我曾经做过一个“新闻阅读器”,当时很喜欢看新闻,想法就是如果看新闻的时候没有广告,安安静静的看多好,于是就开发了一个浏览器书签小插件,使用js提取页面的正文然后通过一个层盖在页面上显示出来,当时只能想到的是通过正则进行对目标dom进行查找,这也是大部分爬虫的抓取方法。

当时对网易、新浪、QQ、凤凰网等各大门户进行了逐一的分析才实现了这个功能。这是最笨的方法,但好处是准确度高,缺点是一旦目标网页修改了源码就可能要重新匹配。

后来我发现我要看的页面越来越多,上面这种办法已经不再适合我的需求。但是最近因为我开发了JSpapap.com,需要一个收藏助手,于是我开始搜寻解决方案。

我主要找到了3种解决方案:

1)基于dom节点的评分制筛选算法

国外有一个叫readable的浏览器书签插件实现了这一点,地址:http://www.readable.tastefulwords.com/,当时看到这个非常赞叹,精准度高。

2)基于文本密度的分析(DOM无关)

这种方法的思路也非常赞,适用性更好,我尝试使用JS进行实现,无奈能力有限并没有做出匹配度太高的成品,遂放弃。

3)基于图像识别

这个和阿尔法狗用到的方法很接近,通过图像识别,只要对机器人进行足够多的训练是可以做到的,其他领域已经有大量案例,但是正文识别具体的实现没有看到(或没有找到案例)。

以上是我找到的3种实现方法。

但基于我只是一个web开发人员,只对JS比较了解,其他的语言能力非常有限。所以我尝试了 一下基于dom的筛选,看了readable的实现是相对复杂的。我想能不能有一个更加高效的方案呢?

后来我发现了一个规律,正文部分一般来说 p 标签的数量是非常多的,比其他部分要多很多,因为大部分网页的内容都是通过所见即所得编辑器发布的,而这些编辑器会生成符合语义的节点。

所以,我取巧使用了这一个规律,开发了一个抓取小插件,效果还不错。当然还很初级,需要完善。

var pt = $doc.find("p").siblings().parent();
  var l = pt.length - 1;
  var e = l;
  var arr = [];
  while(l>=0){
    arr[l] = $(pt[l]).find("p").length;
    l--;
  }
  var temArr = arr.concat();
  var newArr = arrSort(arr);
  var c = temArr.indexOf(newArr[e]);
  content = $(pt[c]).html();

代码很简单,但我测试后80%以上的网页(主要是文章页)是可以抓取成功的。基于此,我开发了JSpapa收藏助手:http://www.jspapa.com/topic/show/5811a97c511bd4734b527a24

如果你对这个有更好的方案,可以在下面探讨。

如需转载本文请联系作者,转载请注明来源 JSpapap.com

<无标签>
举报
hjhosc
发帖于2年前 14回/2K+阅
共有14个评论 最后回答: 2年前
通用正文抽取接口:地址
--- 共有 3 条评论 ---
探索人生回复 @hjhosc : osc有防抓机制,完整的URL后面需要加参数 你可以试试别的网站 2年前 回复
草鱼先生osc上的就很多抓不到 试试这两个网址 https://my.oschina.net/lujianing/blog/787745 https://www.oschina.net/news/79081/rundeck-v-2-6-11 2年前 回复
hjhosc你又不说怎么做的,发这个能表达什么? 2年前 回复
可能你需要的是rss,各大新闻网都有提供
--- 共有 1 条评论 ---
hjhosc不是rss,不一样的性质。我的目的是为了研究提取技术不是为了阅读 2年前 回复
我说两句,你这个算法的抽取,自动化程序有那么一点,但是对于精准度要求比较高的正文抽取,你这个80%的成功率没有意义了,如果能做到人工的配置xpath,就成功率就能和工作量成正比提高
--- 共有 1 条评论 ---
hjhosc人工配置比较原始,当然对于精度不是要求太高的的话我这个方式是比较轻松的 2年前 回复

不光是正文提取,还有标题提取,有的不规范网页<title>标签根本不是标题,如这类网站:http://www.jzdjw.gov.cn/article/laoganbugongzuo/26761.html

基于文本密度的正文提取,很多时候提取的也不精确,我在思考一个基于统计原理的提取算法,但是一直没有时间实现。

--- 共有 5 条评论 ---
Yan9527回复 @yourfei : 标题也是有特征的,对不同类型的代表性网站的标题做特征的总结,例如字体,大小,与正文距离,是否加黑。前面特征提取的过程就是基于统计的方法,是确定阈值的过程。另外,我觉得在标题列表页提取标题并转到内容页提取正文的方式更好,不过这需要判断爬到的页面的类型,又是一个分类过程。 2年前 回复
yourfei回复 @刘梦岩 : 这个算法我已经实现了,我说的是提取标题。 2年前 回复
Yan9527标题的提取在进入正文网页之前完成。正文提取有成熟的论文,比如文字段落大,其中标点符号个数,p标签,css类名带content,等等吧。最后将各权重相加,大于某个阈值就认为是正文。准确率可以达到较高水平。 2年前 回复
yourfei回复 @探索人生 : 标题错了 2年前 回复
探索人生http://www.weixinxi.wang/open/extract.html?urlname=http%3A%2F%2Fwww.jzdjw.gov.cn%2Farticle%2Flaoganbugongzuo%2F26761.html 接口没毛病~呵呵 2年前 回复
顶部