- 浏览: 1277575 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (608)
- 数据结构 (2)
- AJAX (3)
- 设计模式 (3)
- java (117)
- js (14)
- css (9)
- jsp (10)
- 杂文 (49)
- htmlparser (6)
- 数据库 (29)
- 算法 (14)
- 数据挖掘 (11)
- 电脑杂症 (12)
- 网络爬虫 (7)
- 应用服务器 (9)
- PHP (2)
- C# (14)
- 测试 (3)
- WEB高性能开发 (3)
- swt (1)
- 搜索引擎 (16)
- HttpClient (4)
- Lite (1)
- EXT (1)
- python (1)
- lucene (4)
- sphinx (9)
- Xapian (0)
- linux (44)
- 问题归类 (1)
- Android (6)
- ubuntu (7)
- SEO (18)
- 数学 (0)
- 农业资讯 (12)
- 游戏 (3)
- nginx (1)
- TeamViewer (1)
- swing (1)
- Web前 端 (1)
- 主页 (0)
- 阿萨德发首发身份 (0)
- 软件设计师 (0)
- hibernate (5)
- spring3.0 (5)
- elastic (1)
- SSH (3)
- ff (0)
- oracle 10g (9)
- 神经网络 (1)
- struts2.0 (2)
- maven (1)
- nexus (1)
- 辅助工具 (3)
- Shiro (1)
- 联通项目 (0)
- 2014年专业选择 (0)
- freemarker (1)
- struts1.2 (8)
- adfasdfasfasf (0)
- TortoiseSVN (1)
- jstl (1)
- jquery (1)
- eclipse plugin (0)
- 游戏外挂 (1)
- 推广 (0)
- 按键精灵 (1)
- ibatis3.0 (1)
最新评论
-
水野哲也:
不不不, 这个您真错了!其实是你引用的那个jsp和本身的jsp ...
解析关于jsp页面指令冲突问题contentType="text/html;charset=UTF-8" -
caobo_cb:
import xx.cn.weibo.Util;
[ java版]新浪微博之ruquest_token篇 -
caobo_cb:
你好 Util包没有
[ java版]新浪微博之ruquest_token篇 -
小桔子:
你好!我遇到个问题 max_allowed_packet值总是 ...
mysql查询占用内存,优化的技巧 -
donghustone:
谢谢大神!
用JSmooth制作java jar文件的可执行exe文件教程(图文)
http://hi.baidu.com/anspider/blog/item/0718fa0004330605728da522.html
最初接触搜索引擎是2年前,一位北京的朋友(对我帮助很大)让我帮他设计了一只抓网页的蜘蛛。当时我头一次听说蜘蛛,半天没有回过神来,心想:蜘蛛?莫非是蜘蛛机器人?后来我还知道,蜘蛛也被人称为爬虫,正规的名称叫Spider。
第一次写蜘蛛的程序时,阅读了很多规范,同时找到了几个c#代码的(c#是朋友要求的语言)免费的Html解析的库(我记得有一个是解析SGML规范
的)。可惜的是,国内的页面都是乱七八糟的,这2个库根本就是无能为力,连163的首页都无法正确解析。于是,我只好自己写了,代码不是很长(三五千
行),构建dom树。(后来我把这个程序的结果发给百度,想找份工作,结果未见回音)当时遇到的主要问题有三:1)dom树的解析和容错;2)多线程下载
和Url过滤;3)页面编码的分析。
当我离开学校,进入现在的公司的时候,是1年前的事情。进入的时候,我就想做点事情:构建一个垂直搜索引擎的完整解决方案。我没有想到这个事情是无法完成的,所以到目前为止,我也只是完成了一个十分局限的解决方案。
最初的3个月,我疯狂的寻找我梦想中的终极解决方案。为了达到这个目标,我从各种数据库上(实在不好意思,因为穷的原因,所有的文章都是通过非正常渠道获得的,在此感谢帮我从ACM/IEEE等数据库上面下载文章的小鸡MM
和
表弟)下载了500++篇文章(全部外文),还买了好几本中文英文的算法书(比如,支持向量机、HNC层次模型等),一个劲地看,管它是否能看明白。然
后,我就开始设计了第一个智能分析页面的蜘蛛(使用HtmlParser作为dom树的解析),当然了,为了使用上我学习到的各种技术,我是把机器学习算
法/自然语言理解/文法生成等等各种东西拼命的融合在一起,想构建出一个无敌算法来。可惜,一个月之后,这个思路走进了死胡同。机器学习算法?几乎无法用
在页面信息抽取上;自然语言理解?没有一个有效易用的先例。文法生成?难而且不知道用在哪里。虽然问题很多,最后还是勉强的从一些论文里面借来了某些思
路,构建成了一个智能页面分析的蜘蛛。
接下来的3个月,我不断的为这个智能蜘蛛烦恼,因为它的精度太低了。为了提高它的精确度,我不断的修改算法,不断地给他打补丁,直到面目全非。当时,页面匹配是我遇到的最大的问题。
进入2007年后,我不断的问自己,是不是我走错方向了?是不是我的完美理想无法实现?再一次,我仔细的翻阅了最新的一些论文,终于才明白了仅凭我现在的
能力无法做到比它们更好,所以,我难以达到理想的目标了。基于这点考虑,我开始分解问题,把问题分解为3步:
1)人工参与页面信息提取;
2)半自动页面信息提取;
3)全自动页面信息提取。
其实,我之前一直做的是全自动页面信息提取,可以说已经做了一部分的第3步的工作了。而第二步的工作其实是半人工半全自动的形式。
而本文主要阐述如何解决第一部分问题。
1、垂直搜索引擎的定义
国人对垂直搜索引擎的研究已经很
久了,记得能够从cnki上面看到的中文文献中,最早出现垂直搜索引擎这几个字是在1996年(记忆中的)。当时,对它的定义是:行业搜索引擎。即把搜索
的信息局限在某个行业里面的普通搜索引擎。今天垂直搜索引擎的定义还是一样的,唯一不同的是,随着时代的发展,垂直搜索引擎面临了2个新的问题:1)信息
抽取;2)深网络挖掘。除此以外,人们对垂直搜索引擎的刷新速度也提出了比普通搜索引擎更高的要求。搜索引擎一般可以划分为蜘蛛和搜索系统2部分,前者负
责获取数据,后者负责数据检索。本文主要谈论基于深网络的蜘蛛的设计和构建,而检索系统将在以后撰文说明。
2、蜘蛛的主要任务
蜘蛛的目的就是抓取页面,并从页面中提取出有用信息。所以,蜘蛛是分为网页抓取和页面信息抽取2部分的。前者主要关注如何正确的得到想要的页面,如何正确的得到页面的可视信息;后者主要关注如何分类页面,如何获取页面的关键信息。
2.1 检索器
检索器的概念出现在深网络相关技术文章里面,所谓的检索器其实就是如同于我们在百度上看到的那个输入框和搜索按钮一样,它决定了搜索结果页面的url地址。这个地址其实是一个入口地址。它是所有接下来的任务的方向标。
从直观上面看,检索器一般在Form标签里面,有几个输入数据的文本框,加上一个提交的按钮。像百度这样形式的检索器,很容易自动识别出来。这样或许你会 认为检索器很容易自动构造,其实不然。现在的网页越来越美观,很少有页面还是使用那种原始的检索样式,不信你看:
检索器对于外界来说,就是一个不断产生连接请求地址的机器,直到没有可以产生的为止。它产生的地址可以认为由4部分组成:1)请求的url地址;2)请求 的方法;3)请求的参数;4)发送请求的编码。这几部分对于研究过的人来说,应该很容易理解。本处不作过多说明。
2.2 页面获取
我们首先用检索器得到一个请求的地址,接着就是发送这个请求地址,得到对应的页面信息。为了得到页面信息,我们需要一个强壮的http文件(页面)下载器。为什么这么说呢?第一,很多网站都是需要登陆才能够访问到机密信息 的, 故你的下载器必须支持cookie;第二,网页编码识别是一个难题,下载器需要认真的处理这个方面的问题;第三,http的其它各种标准也需要支持,比 如,页面跳转的支持;第四,其他特别的需求,比如,对于下载数据格式的限定(如只下载文本文件)。基于这4个方面和其他某些方面的考虑,我们建立了蜘蛛的 第一个项目:HttpDownloader。
HttpDownloader 项目介绍:
这个项目重点解决了网页编码的识别问题(这个问题是没有完美解决方案的,我们只能够从Unicode标准中定义的utf标准的说明里面找到一些额外的办 法。当然了,刚好有些开源的代码能够支持直接分析二进制数据对应的文本属于哪国文字,这个也是一个不错的补充。)其它问题大部分都是靠开源库搞定,少部分 自己写代码搞定,都没有什么得意的地方值得谈论。另外,在进行大量测试之后,发现实际情况中有各种各样的问题,比如,请求url编码就是其中的一个问题。 默认情况下,url编码应该使用utf-8,可是,国内的网站很多都是要求gb2312编码的,或者说utf-16编码。如果贸然认为都是utf-8的 话,就会遇到连baidu的页面都无法正确获得的问题。这个只是冰山一角,还有好几个这类型的问题,都是和中国国情不兼容。顺便说一句,这个项目主要以HttpClient 作为底层。
2.3 页面解析
虽然我个人曾经用C#写过html代码dom树解析的程序,但我们还是使用了开源的东西来做页面解析。HtmlParser和NekoHtml显然是做页 面解析的2个最有名最好的开源库。不过,它们都有不少的缺点(不兼容),当你遇到后,你需要修改它们的代码,让他们能够正确的运作。这里举个例子说明一 下:
“<strong>very!</strong>”
因为它居然没有识别strong标签!
NekoHtml并不是很好很好。我们知道Balance是NekoHtml最得意的地方,因为其他的解析都是扩展的别人的代码。但是,作者身处在一个有 序的环境之中,并不需要考虑过多的容错性问题,这直接导致了Balance做的很一般(对于中国国情来说)。举个简单例子:
test
</table>
IE和FF会解释为:test<table></table>,而NekoHtml则解释为<table>test</table>
综合起来看,如果你只是需要进行html解析,你就该使用HtmlParser;如果你需要对js进行处理,你就需要使用NekoHtml,不然,你会遇到很多没有html也没有body标签的网页。
为了解决NekoHtml和HtmlParser的一些问题和提高容错度,我们建立了2个新的项目:NekoHtml2007 和HtmlParser2007 ,它们专门用来解决这2个开源项目的Bug(虽然我很希望那些库的作者能够出来解决这些Bug)。
2.4 页面JS解析
至于为什么要处理js,你可以简单的访问 http://image.baidu.com/i?ct=201326592&cl=2&lm=-1&tn=baiduimage&pv=&word=mm&z=0 , 然后看看源文件。明白了吧?现在很多网站的页面都是使用js构建出来的,更不用说那些使用web2.0(AJAX)技术的网站了。一个强壮的有竞争力的商 业垂直搜索引擎,不支持这种东西是不行的。最基本的支持JS的方法是使用IE或者FF(FireFox)使用的借口,调用它们解析页面,不过,这种方法的 浏览速度超慢,不可能成为一个搜索引擎的选择。所以,必须自己想办法做一个支持的库出来(忽略图像渲染部分,能够加快构建速度和处理时间)。
说支持JS容易,可是,到底该怎么支持呢?好在我多年前关注js的时候,已经关注过一个叫SpiderMonkey的东西了。它的Java版本叫 Rhino。现在Rhino已经整合到JDK1.6里面了,所以,各位不用再去下载它了。Rhino它是一个js脚本的解释运行库。但它并不支持dom树 (因为js实际上和html已经没有任何关系了,js更多的时候用在脚本处理里面,这点和VBScript有点像)。为了让它支持dom树,需要我们自己 进行扩展。研究一番Rhino,再研究一番其他使用了Rhino的开源项目(特别推荐你看看HtmlUnit 项 目的源代码,最新的htmlunit1.13已经可以比较好的支持js的解析了,如果你只是做点基本的小应用,可以用它来做js方面的问题),你就应该能 够找到思路了。剩下的就是艰苦的编程了,很无趣的工作,因为你需要满足IE的规范,也要满足FF(dom1-dom3)的规范。
做好js的解析之后,你还可以考虑css的解析,css的解析目前没有发现特别好的开源工具。一切完备之后,就是把它们组合起来,构建一个模拟IE和FF 的浏览器了(没有图形界面,所以,速度飞快)。浏览器支持的额外功能可能要根据自己的需要来定了。
3 信息抽取
如果你在记录提取方面是一个初学者,那么,我推荐你先看看:STAVIES: a system for information extraction from unknown Web data sources through automatic Web。同样的道理,这里涉及到的算法太多,请根据你自己的实际应用选择一个好的算法。
需要提醒大家的是,基于结构的页面信息提取其实是一个中间过程。其完整的过程是:1)根据结构和文本获得结构模板;2)根据模板匹配页面,获得信息。上图 展示的是一个手工构建模板的程序。它替代了自动模板构建的过程。这样做的原因是很明显的:部分页面很难自动生成模板或者说自动生成的模板精确度不高。基于 结构的页面信息提取的主要算法就是页面的Dom树匹配。树匹配算法研究很多,大家可以自己去找资料。唯一的是,这类算法一般都会遇到各种实现的问题,正好 是检测算法水平的时候,赫赫。
WalkingSpider: 不 用我告诉大家,大家就应该知道猜测到它应该是比上面的基于结构的信息抽取更加高层的东西。它就是专门针对某个行业的自动模板构建程序。它大量的运用了页面 短语文本和超链接文本的特性,使用一些简单的文本分析技巧。因为信息抽取的文章太多了,各种办法都有。考虑到行业的特点,这里只是使用了简单的基于正则表 达式和命题学习算法来分析文本(短语),这类算法一大把,随便找篇论文都能看到。当然了,为了更好的判断短语的含义,这里也使用了一些语义网络(和本体 论)的知识。具体的步骤就不说了,因为那会泄露行业的信息。
3.2 详细页面的处理
其实之前的列表页面的处理就说了一部分详细页面的处理了。大家看到的页面的处理(VerticalSearch项目),其实就包含了详细页面的处理。因为 那个项目是通用页面处理程序,对列表和详细页面都是适合的。我不想再重复一遍处理方式,只把一个详细页面的例子贴上来,让大家对所谓的详细页面有个理解:
今日再次修改。(2007-8-24)
评论
网上很多关于这方面的资料,你先去了解下。
发表评论
-
tomcat was unable to start within 45 seconds
2013-11-11 15:59 842原因一: -
Apache Commons Lang
2013-10-15 12:10 3170ArrayUtils public class Tes ... -
htmlunit form
2013-06-25 11:13 931Form提交 对于WEB应用,有着大量的表单,所以Html ... -
QQ微博登录步骤
2013-05-28 12:14 0QQ微博登录步骤: 1、验证帐号时,会访问一个地址。如下: ... -
jsoup
2013-05-22 23:37 1148import org.jsoup.Jsoup; import ... -
java 加密解密
2013-05-21 23:00 851import java.security.InvalidKey ... -
freemarket 对象应用篇(一)
2013-05-19 18:18 1049freemarket应用. 1.1:创建web工程testF ... -
中文数字转阿拉伯数字
2012-11-30 14:24 1804/** * @author loiy * ... -
标记:伪原创标题思路
2012-01-11 16:34 1303采用填词的办法进行伪 ... -
用JSmooth制作java jar文件的可执行exe文件教程(图文)
2012-01-05 01:09 8200下载完程序之后,运行 jsmoothgen.exe 1.进入“ ... -
多线程 Java.util.ConcurrentModificationException异常
2011-12-29 13:43 1531Iterator<Entry<String,B ... -
java 反序列化 抛出EOFException
2011-12-19 17:21 2261抛出这样的异常,一般情况下,是因为业务逻辑的问题。 如: 在没 ... -
一键安装双击运行——Java安装程序制作
2011-12-09 02:39 1337对于Java桌面应用来说,比较烦琐的就是安装部署问题,如:客户 ... -
只针对中英文混合分词的中文分词器
2011-12-02 17:28 4880该版本说明 1、只针对中英文混合分词 需要一些中文和英文连在 ... -
Java开源运行分析工具
2011-11-15 15:10 1890FProfiler FProfiler是一个非常快的Java ... -
cwss 按照指定的字符进行切词
2011-11-15 09:37 1243cwss 按照指定的字符进行切词 在 Utility.SEPE ... -
cwss bug 修复
2011-11-07 09:50 894修复的BUG有如下: 1、当只有中文、字母和数字,没有任何其他 ... -
java 怎么读取细胞词库scel
2011-10-24 14:28 3125private void sogou(String pa ... -
今天遇到一个奇怪的问题
2011-04-28 11:55 1191想实现一个用户访问页面,得到用户的外网地址 在公司上。程序是没 ... -
在myeclipse6.5下统一全部JSP编码更改
2011-04-07 14:47 1467在平时我们新建一个JSP页面默认编码是"ISO885 ...
相关推荐
本文通过深入研究Deep Web垂直搜索引擎的设计与实现,不仅解决了传统搜索引擎在检索Deep Web信息方面的局限性,还提出了一系列创新的技术方案,为未来的搜索引擎技术发展提供了重要的参考和启示。
- **Nutch网络搜索软件**:Nutch是一个开源的网络爬虫项目,它可以配合Lucene一起使用,构建完整的搜索引擎解决方案。 - **用户界面**:除了核心的技术实现外,良好的用户体验也是搜索引擎成功的关键之一。 ##### ...
**核心技术:** 该项目的核心技术是一套垂直搜索引擎集群的解决方案。该技术集成了蜘蛛模块、自动模板系统、索引模块、检索模块和集群模块等多个组件,能够快速构建和扩展垂直搜索服务。 **创新之处:** 相较于传统的...
该系统的设计和实现基于当前中文搜索引擎存在的问题,如搜索结果不准确、搜索速度慢等。为了解决这些问题,本系统采用了一种新的垂直搜索模式,能够更快速、更准确地提供用户所需的信息。其核心理念在于通过专门化、...
- **定义**:搜索引擎营销(SEM)是指通过搜索引擎进行推广的一种网络营销方式,目的是提高网站在搜索结果中的可见性,从而吸引更多的潜在客户。 - **价值**:SEM可以帮助企业提升品牌知名度,增加销售机会。 - **...
支持网页定向采集,垂直搜索引擎提高数据质量和相关度的关键技术,用户可以自定义采集规则针对特定网页进行采集。支持多种动态和静态网页类型采集,多语言网页编码自动识别。采用哈希表网页去重技术,具有高性能、低...
支持网页定向采集,垂直搜索引擎提高数据质量和相关度的关键技术,用户可以自定义采集规则针对特定网页进行采集。支持多种动态和静态网页类型采集,多语言网页编码自动识别。采用哈希表网页去重技术,具有高性能、低...
2. **垂直搜索**:针对特定主题或行业的搜索引擎,如招聘网站的职位信息聚合,需要爬取多个相关网站获取数据。 3. **科学研究**:在社会科学、复杂网络研究、数据挖掘等领域,爬虫用于收集大规模的网络数据,支持...
商剑采集-信息采集-垂直搜索引擎-网络蜘蛛爬虫-网页抓取-商剑官方网站http://www.100spider.cn/ 1.采用结构化和非结构化信息终极解决方案。绝对满足任何采集需求,绝对完全轻松解决。 2.强大的信息采集功能。可采集...
- 本章概述了搜索引擎的基本概念和发展历程,并介绍了构建一个简单搜索引擎所需的步骤和技术要点。 #### 二、搜索引擎技术详解 **2.1 30分钟实现的搜索引擎** - **2.1.1 准备工作环境** - 安装Java开发环境。 -...
支持网页定向采集,垂直搜索引擎提高数据质量和相关度的关键技术,用户可以自定义采集规则针对特定网页进行采集。支持多种动态和静态网页类型采集,多语言网页编码自动识别。采用哈希表网页去重技术,具有高性能、低...
13. **检索引擎**:网络爬虫、网络蜘蛛和网络机器人是搜索引擎抓取和索引网页的主要工具。 14. **电子商务与组织结构**:电子商务可以促进企业关注核心竞争力而非垂直一体化,改善信息流动,降低交易成本,并可能...
传统的网络数据采集技术主要是通过垂直搜索引擎技术(如网络蜘蛛、分词系统等)来实现数据抓取及分类,但随着应用场景的多样化,特别是在移动环境下(例如车载设备),数据采集存储设备面临着新的挑战。例如,在汽车...