为什么返回ParseReasult中的外部链接数小于解析的外部链接数
来源:互联网 发布:阿里云centos安装桌面 编辑:程序博客网 时间:2024/04/20 00:15
通过跟踪发现,Fetcher获得网页解析链接没有问题,获得了网页中所有的链接,然后在output()函数中通过FetcherOutputFormat类输出(包含在ParseResult中)。
但是在更新数据库的CrawlDb的update()函数中,发现并没有获得所有的链接,而是部分链接,而且相当一部分链接被过滤掉了。
问题肯定出在FetcherOutputFormat类中,FetcherOutputFormat中负责ParseResult数据输出的是ParseOutputFormat类,分析ParseOutPutFormat类发现在write()函数中,将ParseResult中的Outlink[]取出,然后将Outlink[]进行处理放到targets链表中,targets链表最终将输出到crawl_parse中作为CrawlDb的输入,问题就出在将OutLink[]中的数据取出来放到targets的过程中,因为对每个连接url要进行过滤处理,处理掉格式不正确或者是内部的链接,通过的链接还要进行进一步的规范化和过滤处理(规范化由regex-normalize.xml中的正则表达式过滤,过滤由regex-urlfilter.txt中的正则表达式过滤),当对url进行规范化的时候过滤掉了很大一部分链接,链接中含有“sid=”被当做session id过滤掉了,所以更新中获得不到这部分链接。
for (int i = 0; i < links.length && validCount < outlinksToStore; i++) { String toUrl = links[i].getToUrl(); // ignore links to self (or anchors within the page) if (fromUrl.equals(toUrl)) {//过滤内部链接 continue; } if (ignoreExternalLinks) {//过滤掉内部链接 try { toHost = new URL(toUrl).getHost().toLowerCase(); } catch (MalformedURLException e) { toHost = null; } if (toHost == null || !toHost.equals(fromHost)) { // external links continue; // skip it } } try { toUrl = normalizers.normalize(toUrl, URLNormalizers.SCOPE_OUTLINK); //规范化url toUrl = filters.filter(toUrl); // 过滤掉url if (toUrl == null) {//如果链接到服务器不可用则忽略url continue; } } catch (Exception e) { continue; } CrawlDatum target = new CrawlDatum(CrawlDatum.STATUS_LINKED, interval); Text targetUrl = new Text(toUrl); try { scfilters.initialScore(targetUrl, target);//对链接进行打分 } catch (ScoringFilterException e) { LOG.warn("Cannot filter init score for url " + key + ", using default: " + e.getMessage()); target.setScore(0.0f); } targets.add(new SimpleEntry(targetUrl, target)); outlinkList.add(links[i]); validCount++; }
- 为什么返回ParseReasult中的外部链接数小于解析的外部链接数
- 外部链接
- 外部链接
- 外部链接指向的讨论
- 外部链接的优化操作
- 外部链接的优化操作
- 网站的外部链接建设
- 链接的时候出现“无法解析的外部命…
- 链接时出现无法解析的外部符号排错
- 链接错误——无法解析的外部符号 ConvertStringToBST
- c++ 链接mysql:error LNK2019: 无法解析的外部符号
- 出现链接错误:无法解析的外部命令
- c++ 链接mysql:error LNK2019: 无法解析的外部符号
- c++ 链接mysql:error LNK2019: 无法解析的外部符号
- c++ 链接mysql:error LNK2019: 无法解析的外部符号
- 无法解析的外部符号 关于链接库
- VS链接提示无法解析的外部符号 __imp__fopen解决办法
- 内部链接与外部链接
- Qt基础——Qt4.7安装 windows7+Qt+VS2008
- python OS
- 从dll文件中获取函数名
- 下个决心
- activiti学习资料(背景,组件描述)
- 为什么返回ParseReasult中的外部链接数小于解析的外部链接数
- ubuntu10.10(amd 64)安装flash player(firefox)
- 利用CAS之SSO模块实现单点登录认证
- 为什么文件名(以及路径名)里含 # 字符的 CHM 文件会不能正常打开?
- 星图B
- 上海部分小区地下车位价格翻倍升至70万-车位-价格
- Tab组件的使用
- Visual C#中实现窗体间的数据传递
- 淘宝技术发展(分布式时代:服务化)