“新闻订阅”系统网络爬虫部分设计报告
爬虫部分(以下称爬虫)的功能是定期从网络上收集新出现的新闻网页;将其内容以增量的形式存储起来;计算其与以往新闻的相关度,构成按时间组织的新闻事件序列。
爬虫所有处理的网页可以分为两个类别:目录型网页和内容型网页。目录型网页是一些新闻门户网页(例如:http://sports.sohu.com/),其页面上含有大量链接指向新闻内容网页。这些网页的特点是:该类网页数量很少,URL固定;网页中的新闻链接已经分类;网页内容(特别是网页中的链接)更新频繁。根据这些特点,我将目录型网页记录在一个配置文件(baseurl.ini)中,并标记其中的新闻类别。爬虫工作时从baseurl.ini中读取目录型网页的URL。
爬虫工作的第一步是找到目录型网页中最新的新闻链接。对于目录型网页,我们只关心其中的链接。这些链接页可以分为两个类别:目录型链接,新闻型链接。其中目录型链接指向另一些目录型网页;而新闻型链接指向实际的新闻网页,后者是我们需要的。这两类链接在网页结构上的最大区别是:目录型链接在页面中很稳定,一般不会被频繁更换;而新闻型链接则更新频繁,且一旦被替换就不会再在网页中出现。根据这个特点爬虫过滤目录型链接的方法是:为每一个目录型网页建立一个“旧链接”文件,其中记录上次访问该网页时找到的所有链接;根据这个列表就可以找到两次访问间隔中该网页中新添加的链接。该方法的可行性正是利用到目录型链接与新闻型链接的特点:目录型链接在页面中一般不会变化,所以除第一次以外爬虫都不会认为一个目录型链接是“新链接”;新闻型链接不会重复几次出现在页面上,保证了每个新闻链接只被抓取一次。
从目录型网页中抓取最新的新闻链接之后,爬虫的第二步工作是读取链接指向的新闻网页中的内容。新闻型网页的网页结构是:其主要内容是一段文字,其中可能有少量链接(说明型链接)、也可能附有图片;网页主要内容周围有很多无用信息(例如目录型链接,热点新闻链接,广告内容等)。正文的特点是纯文字占主要部分,无用信息则是链接占主要部分。过滤新闻类网页中的无用信息,爬虫的处理方法是:记录网页中出现的<p和</p标记,根据该标记将网页中的文字分成若干块;对每一块文字分别计算其“文字链接比”(总文字数/总链接数)和“文本文字链接文字比”(纯文本文字/链接中文字),根据这两个指标的值判断该块文字是否为正文。提取新闻图片的方法是:提取新闻标题后正文之前的最后一个jpg图片。
提取新闻网页正文过程中,另一项附属工作是利用新闻网页的结构提取新词,优化我们用来切词的词典。在新闻类网页中除了上面提到的两类链接外,另有一种链接:说明类链接。该类链接标记在新闻正文中出现的“新颖词汇”之上,其链接的网页是对该词汇的解释。“新颖词汇”的几个特点是:一般并不出现在我们使用的词典内;能很好的体现该条新闻的特点;网页中的链接直接起到了切词的工作。利用这些特点,在获取正文的同时,爬虫将正文中链接标记的词汇添加到切词词典中去。
爬虫的最后一个工作是计算“最新新闻”的摘要、计算“最新新闻”与“以往新闻”的相关度、按照类别将“最新新闻”存储到“新闻日志”文件中去。新闻的类别直接由获取该新闻的目录型网页的类别决定(该类别记录在baseurl.ini中)。“新闻日志”的中记录的内容包括:新闻标题、新闻获取时间、新闻网页链接、新闻中图片链接、新闻正文、新闻摘要、新闻来源、相关新闻列表。使用Summary类对新闻正文计算计算新闻摘要。使用Similarity类分别计算两条新闻“新闻标题”和“新闻正文”的相关度,最后将两个相关度加权合并成一个相关度,将相关度大于一个阈值的新闻放入“相关新闻列表”中。这样做的原因是:新闻标题中的词汇更能够体现新闻的内容。