做网站的朋友们不免都会涉及到要从其他网站抓取一些信息。
1. 常用的办法是用正则表达式来获取
优点:比较精准,一蹴而就,不会遗漏你需要的内容
缺点:全中国这么多网页,如果写正则表达式要写到发疯! 如果目标网页一旦改版就要重新写正则表达式,人工排查工作太大。
2. 我们要讨论的是是否能自动分析网页正文 (标题在下一章节讲)
有两个思路 第一是:关键字匹配法(本次主要讲述此方法,仅思路,因商业原因不提供源代码) 第二个是:文本区域获取法
关键字匹配法
每个新闻页面都充斥着大量的文字要素,干扰因素非常多,本人查阅了很多关于分析正文的文章,很复杂,不适合我们草根程序员使用,而且算法完成后精确度不怎么样,效率也不是很高。于是个人山寨了一个关键字匹配法.
准备工作 :
1.准备一个分词类库 这里使用的是 shotseg 1.0 效果很一般 但是还可以用用了。
2.稍微看一下 tf-idf 的概念(TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。TF-IDF加权的各种形式常被搜索引擎应用,作为文件与用户查询之间相关程度的度量或评级。除了TF-IDF以外,互联网上的搜寻引擎还会使用基于连结分析的评级方法,以确定文件在搜寻结果中出现的顺序。)
3.自己写代码实现根据 url 获取 html源代码的方法,由于太简单 这里不讨论。
4.过滤html源码中的所有超级链接和脚本 以及图片(图片过滤方法本文不讨论,后面会讲), 因为新闻详细页中的超级链接我们是不需要的,我们需要的是文字信息。
接下来开始思路讲解:
1.过滤完成后的文本,按照回车进行切割,会变成一个文本数组, 里面包含了空行和文本信息, 这里的空行在本文中没什么用处,但是在下一章节中就很有用了
结果 会出现 这样 string[] strList={ " ",
"\t ",
"今天气温到达了40度",
" 摘要:江南地区温度急速上升"
"请发表评论",
"内容:经过气象台预测,可能今日江苏地区气温会上升到40度左右。",
"请广大网民做好防暑工作,尽量减少在高温下进行体力工作",
"\t ",
"\t ",
"\t ",
"版权所有:测试新闻网 ",
}
对于这段文字 我们需要的是 今天气温到达了40度 内容:经过气象台预测,可能今日江苏地区气温会上升到40度左右。请广大网民做好防暑工作,尽量减少在高温下进行提供作". 其他的内容都不要 .
通过使用 shootseg 分出关键字(稍作处理), 则获得如下关键字 气温,今天,摘要,江南地区,温度,评论,内容,气象台,预测,江苏,地区,网民,防暑,减少,高温,版权,新闻
然后分别计算 这些关键字的tf-idf 值,(语料库 要自己准备,数据库中数据越多,语料库越完善) ,经过计算
获取tf idf 值最有价值的关键字 气温,防暑,体力, 这里需要你在实践中设置阀值 ,既tf idf值的认可系数。
于是接下来的事情 就比较简单了, 循环所有 列表 ,抽取 包含上述 “最有价值” 关键字的 段落 然后进行拼接 于是就得到了最终 的网页正文。
至于标题, 这里使用的 是 正则表达式 获取 <title></title>的 内容,这样可以很有效的过滤掉 干扰因素
经过我程序测试 ,大部分新闻网站都能正确 抓取。 因为 大部分新闻 段落 都和本文的的关键字直接有关。然后 有种情况经常会遗漏。
如我看到一篇公告 页面 内容如下
四、周边环境
1.商业:常州购物中心、文化宫、天宁商都
2.娱乐配套:黄金大酒店、东方明珠KTV、文笔山庄
3.其他:红梅公园、常州火车站、常州长途汽车客运站
五、注意事项
1.竞买资格:具有完全民事行为能力的自然人或法人
2.标的需要一次性付款,贷款合作银行为中国建设银行常州分行营业部
六、联系方式
王先生 1399XXX
请关注我的个人官网: www.shenyisyn.org