c#抓取网页数据(识别不能实现的原理和问题产生进行介绍(图))

优采云 发布时间: 2022-02-05 07:23

  c#抓取网页数据(识别不能实现的原理和问题产生进行介绍(图))

  困扰了我几天的问题今天终于解决了,分享一下最近使用solr的一些心得。

  最初是使用nutch来爬取页面,但是客户需要爬取RSS,通过RSS提要可以识别那些被爬取的页面。虽然 nutch 自带了解析 RSS 的插件,但是有些 RSS 无法解析,难以控制。更重要的是,爬取后和普通页面并没有太大区别。它无法识别和判断爬取的是哪个RSS源。. 由于以上原因,我用C#写了一个项目,用Solr爬取RSS。

  一切落实后,客户很满意,我也觉得做工还不错,但是用了一段时间,发现solrdedup时nutch出现故障,导致nutch无法使用。下面将介绍rss的实现原理和问题的产生。Solr和nutch没有解决是因为非常难懂,主要是这样的问题在网上很难找到。由于公司没有外网和版权,一切只能凭记忆写。

  RSS+Solr的实现是利用webrequest读取rss源的xml格式的内容,在post方法中直接为solr创建索引。为了满足客户的要求,我在solr的schame中添加了rss和isrss字段,其中rss是rss源的url地址,isrss固定为true。由于nutch没有这两个字段,我们只需要输入isrss:"true"查询rss就可以过滤掉不是来自rss的页面。

  实施过程中应注意以下几点

  1.rss源不是后缀为xml的文件,有些是普通页面的响应,有些需要登录权限

  2.RSS目前主要有两种格式,常见的xml结构是rss/channel/item,另一种是我们博客园rss的结构feed/entry。

  里面的label是固定的,可以通过不同的label找到solr中filed所需要的值

  3.id、digest、tstamp 三个字段是必须的。

  如上所述,nutch 运行到 solrdedup 时,会报错。一开始我以为是solr新增的两个字段。我尝试在nutch中添加两个字段,并且还使用了nutch的静态字段插件和额外字段插件,但是没有成功。最后发现,清除solr数据后,nutch可以正常运行了。我也在谷歌上查了很多,但它根本没有帮助。我认为这是solr缓存的原因。今天刚好有点空,于是找到nutch的报错文件solrdeleteduplicates.java,发现nutch是通过直接从solr中取出id、digest、tstamp字段来去除重复的,不判断是否是直接使用空的。

  但是,我写的程序中没有添加digest和tsamp。果然,加上这两个字段后,我完成了没有这两个字段的所有数据,nutch又可以正常运行了。

  4.digest是网页的32位hash值,用于nutch去重复时比较差异

  5.solr可以直接通过请求url添加、修改、删除内容,修改后的格式和新的一样

  主要核心是:xx.xx.xx.xx/solr/update?stream.body=xx&stream.contentType=text/xm;charset=utf-8&commit=true

  如果内容有ur格式和html格式,需要转码

  6. solr的时间是GMT格式的,所以不要搞错,而且rss中有些GMT格式是错误的,我遇到过很多,错误的星期会导致solr索引失效。

  目前信息还是比较全的,搜索也比较方便,但是还有很多问题需要解决,主要是js生成的页面无法读取,可以过滤页面信息。文章的主要内容,过滤导航等信息仍然难以获取。目前,我发现的其他人正在根据统计规则进行过滤。比如很多导航栏用|隔开,内容中的空格用空格隔开。等待。每个站点的html布局风格不同,标签难以统一。百度和谷歌不知道如何实现,或者他们没有真正实现。

  Nutch还是比较强大的,但是我总觉得维护和修改不容易。上次编译源码的时间比较长,solr查询也比较高效。可能正计划编写一个 .net 版本的爬虫和搜索,但这只是在计划中,因为涉及的问题太多......

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线