7.29.2008

网络爬虫

随着网络技术的发展,互联网已经成为海量信息的载体,随着人们对这些信息进行有效提取以及应用的需求的增加,搜索引擎(Search Engine)应运而生,例如传统的通用搜索引擎AltaVista,Yahoo!和Google等,作为一个辅助人们检索信息的工具成为用户访问万维网 的入口和指南。但是,这些通用性搜索引擎也存在着一定的局限性,如:
1、针对不同需求,不同背景的用户,搜索引擎还不够智能,返回的结果大多包含对用户无用的信息。

2、不能很好地发现和获取图片、数据库、音频/视频多媒体等不同数据。

为了解决上述问题,便产生了定向抓取相关网页资源的聚焦爬虫,与通用爬虫(即大部分搜索引擎所使用的爬虫)相比, 聚焦爬虫并不追求大的覆盖,而将目标定为抓取与某一特定主题内容相关的网页,为面向主题的用户查询准备数据资源。聚焦爬虫是一个自动下载网页的程序,它根 据既定的抓取目标,有选择的访问万维网上的网页与相关的链接,获取所需要的信息。

1 网络爬虫的工作原理

传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定 停止条件。聚焦爬虫的工作流程较为复杂,需要根据一定的网页分析算法过滤与主题无关的链接,保留有用的链接并将其放入等待抓取的URL队列。然后,它将根 据一定的搜索策略从队列中选择下一步要抓取的网页URL,并重复上述过程,直到达到系统的某一条件时停止。另外,所有被爬虫抓取的网页将会被系统存贮,进 行一定的分析、过滤,并建立索引,以便之后的查询和检索;对于聚焦爬虫来说,这一过程所得到的分析结果还可能对以后的抓取过程给出反馈和指导。

相对于通用网络爬虫,聚焦爬虫还需要解决三个主要问题:
(1) 对抓取目标的描述或定义;
(2) 对网页或数据的分析与过滤;
(3) 对URL的搜索策略。
抓取目标的描述和定义是决定网页分析算法与URL搜索策略如何制订的基础。而网页分析算法和候选URL排序算法是决定搜索引擎所提供的服务形式和爬虫网页抓取行为的关键所在。这两个部分的算法又是紧密相关的。
2 抓取目标描述
现有聚焦爬虫对抓取目标的描述可分为基于目标网页特征、基于目标数据模式和基于领域概念3种。
基于目标网页特征的爬虫所抓取、存储并索引的对象一般为网站或网页。根据种子样本获取方式可分为:
(1) 预先给定的初始抓取种子样本;
(2) 预先给定的网页分类目录和与分类目录对应的种子样本,如Yahoo!分类结构等;
(3) 通过用户行为确定的抓取目标样例,分为:
a) 用户浏览过程中显示标注的抓取样本;
b) 通过用户日志挖掘得到访问模式及相关样本。
其中,网页特征可以是网页的内容特征,也可以是网页的链接结构特征,等等。
现有的聚焦爬虫对抓取目标的描述或定义可以分为基于目标网页特征,基于目标数据模式和基于领域概念三种。
基于目标网页特征的爬虫所抓取、存储并索引的对象一般为网站或网页。具体的方法根据种子样本的获取方式可以分为:

(1)预先给定的初始抓取种子样本;

(2)预先给定的网页分类目录和与分类目录对应的种子样本,如Yahoo!分类结构等;

(3)通过用户行为确定的抓取目标样例。其中,网页特征可以是网页的内容特征,也可以是网页的链接结构特征,等等。

3 网页搜索策略
网页的抓取策略可以分为深度优先、广度优先和最佳优先三种。深度优先在很多情况下会导致爬虫的陷入(trapped)问题,目前常见的是广度优先和最佳优先方法。
3.1 广度优先搜索策略
广度优先搜索策略是指在抓取过程中,在完成当前层次的搜索后,才进行下一层次的搜索。该算法的设计和实现相对简单。在目前为覆盖尽可能多的网页,一般使用 广度优先搜索方法。也有很多研究将广度优先搜索策略应用于聚焦爬虫中。其基本思想是认为与初始URL在一定链接距离内的网页具有主题相关性的概率很大。另 外一种方法是将广度优先搜索与网页过滤技术结合使用,先用广度优先策略抓取网页,再将其中无关的网页过滤掉。这些方法的缺点在于,随着抓取网页的增多,大 量的无关网页将被下载并过滤,算法的效率将变低。
3.2 最佳优先搜索策略
最佳优先搜索策略按照一定的网页分析算法,预测候选URL与目标网页的相似度,或与主题的相关性,并选取评价最好的一个或几个URL进行抓取。它只访问经 过网页分析算法预测为“有用”的网页。存在的一个问题是,在爬虫抓取路径上的很多相关网页可能被忽略,因为最佳优先策略是一种局部最优搜索算法。因此需要 将最佳优先结合具体的应用进行改进,以跳出局部最优点。将在第4节中结合网页分析算法作具体的讨论。研究表明,这样的闭环调整可以将无关网页数量降低 30%~90%。
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=

世界上第一个网络爬虫是由麻省理工学院 (MIT)的学生马休.格雷(Matthew Gray)在 1993 年写成的。他给他的程序起了个名字叫“互联网漫游者”("www wanderer")。以后的网络爬虫越写越复杂,但原理是一样的。
我们来看看网络爬虫如何下载整个互联网。假定我们从一家门户网站的首页出发,先下载这个网页,然后通过分析这个网页,可以找到藏在它里面的所有超链接,也 就等于知道了这家门户网站首页所直接连接的全部网页,诸如雅虎邮件、雅虎财经、雅虎新闻等等。我们接下来访问、下载并分析这家门户网站的邮件等网页,又能 找到其他相连的网页。我们让计算机不停地做下去,就能下载整个的互联网。当然,我们也要记载哪个网页下载过了,以免重复。在网络爬虫中,我们使用一个称为 “哈希表”(Hash Table)的列表而不是一个记事本纪录网页是否下载过的信息。
现在的互联网非常巨大,不可能通过一台或几台计算机服务器就能完成下载任务。比如雅虎公司(Google 没有公开公布我们的数目,所以我这里举了雅虎的索引大小为例)宣称他们索引了 200 亿个网页,假如下载一个网页需要一秒钟,下载这 200 亿个网页则需要 634 年。因此,一个商业的网络爬虫需要有成千上万个服务器,并且由快速网络连接起来。如何建立这样复杂的网络系统,如何协调这些服务器的任务,就是网络设计和 程序设计的艺术了。

在Java中,网络爬虫大体需要一下几个方面的知识:

1 多线程的自动HTTP下载。

2 HTML文件的格式解析。

3 把解析后的文件存入数据库。

7.23.2008

SVN tag和branch的选择及应用

在SVN中Branch/tag在一个功能选项中,在使用中也往往产生混淆。

在实现上,branch和tag,对于svn都是使用copy实现的,所以他们在默认的权限上和一般的目录没有区别。至于何时用tag,何时用branch,完全由人主观的根据规范和需要来选择,而不是强制的(比如cvs)。

一般情况下,
tag,是用来做一个milestone的,不管是不是release,都是一个可用的版本。这里,应该是只读的。更多的是一个显示用的,给人一个可读(readable)的标记。
branch,是用来做并行开发的,这里的并行是指和trunk进行比较。

比如,3.0开发完成,这个时候要做一个tag,tag_release_3_0,然后基于这个tag做release,比如安装程序等。trunk进入 3.1的开发,但是3.0发现了bug,那么就需要基于tag_release_3_0做一个branch,branch_bugfix_3_0,基于这 个branch进行bugfix,等到bugfix结束,做一个tag,tag_release_3_0_1,然后,根据需要决定 branch_bugfix_3_0是否并入trunk。

对于svn还要注意的一点,就是它是全局版本号,其实这个就是一个tag的标记,所以我们经常可以看到,什么什么release,基于xxx项目的 2xxxx版本。就是这个意思了。但是,它还明确的给出一个tag的概念,就是因为这个更加的可读,毕竟记住tag_release_1_0要比记住一个 很大的版本号容易的多。

Java学习网站

1、java研究组织 (http://www.javaresearch.org/index.jsp)。

该网站有许多文章,涉及java的各个领域和方向。另为还有许多软件和书籍的下载,
使一个java学习的不错的网站,有空去逛逛,会学到许多的东西。

2、灰狐动力(http://www.huihoo.com/

该站点有许多的开源的项目的介绍和学习,涉及操作系统,数据库等许多方向;有如多的英文的文档,可以提高英文文档的阅读能力。

3、java爱好者(http://www.javafan.net)

该网站是一个不错的网站,有许多的java学习资源,不足自出是文章少。

4、爪哇流氓(http://www.kissjava.com)

在这里你可以找到如多java开发工具的破解文件。对于学习开发工具是比较好的

5、sun中国技术社区(http://gceclub.sun.com.cn/index.html

这里有有关sun公司在java发展,操作系统等许多的信息和软件的更新;时不时的浏览一下,可以了解一下 java的最新信息

6、IBM developerworks java社区(http://www-128.ibm.com/developerworks/cn/java/index.html

在这里有许多最权威的专家发表的java学习的各方面文章,对提高java学习时非常有好处的。

7、java中文文章学习(http://www.gbg.cn/

这里可以阅读到许多的中文文章,对于英文不好的同仁,是不错的选择。

8、中国it认证试验室(http://www.chinaitlab.com/index.htm

在这里可以学到许多的东西,除了java之外的许多的东西,当然java的东西也不少。

9、J道(http://www.jdon.com/idea.html

这里可以学到关于j2ee的应用技术,对j2ee有兴趣的朋友,不妨来逛一下

10、javalobby(http://www.javalobby.org/)

这是一个英文网站,闲来没事,上去看看,不但了解java相关信息,还可以提高英文水平,何乐而不为。

11、java导航
(http://www.wsjava.com/)
这是一个非常全面的JAVA导航网站。

12、http://www.theserverside.com/home/ (英文)
TheServerSide是一个著名的专门面向Java Server端应用的网站。

13、http://www.javaresearch.org/

Java研究组织,有很多优秀的Java方面的文章和教程,特别是在JDO方面的文章比较丰富。

14、http://www.cnjsp.org/

JSP技术网站,有相当多的Java方面的文章和资源。

15、http://www.jdon.com/

Jdon论坛,是一个个人性质的中文J2EE专业技术论坛,在众多的Java的中文论坛中,
Jdon一个是技术含量非常高,帖子质量非常好的论坛。

16、http://sourceforge.net/
SourgeForge是一个开放源代码软件的大本营,其中也有非常非常丰富的Java的开放源代码
的著名的软件。

17、http://dev2dev.bea.com.cn/index.jsp
BEA的开发者园地,BEA作为最重要的App Server厂商,有很多独到的技术,
在Weblogic上做开发的朋友不容错过。

不断加精中

好了,以上是本人收集的关于java学习的不错的网站,在这写出来和大家分享希望对大家有用处。

7.22.2008

Mysql在XP下设置及常见错误

将Mysql添加到Windows系统服务中:
1.、 安装服务。
在Windows2000下,安装完成后,并没有把MySQL安装成服务,我们必须执行下面的语句把MySQL注册为服务:installdir\mysql\bin\mysqld-nt –-install。
Windows98下没有服务的概念,所以不用安装服务。
2.、 启动服务
在Windows2000下,安装服务后可以启动MySQL服务:net start mysql。
在Windows98下,可以用下面的命令启动服务:c:\mysql\bin\mysqld,服务启动后在后台运行,并没有界面。
3.、 停止服务
在Windows2000下,可以通过下面的命令停止MySQL服务:net stop mysql。
在Windows98下,可以通过下面命令停止服务:C:\> C:\mysql\bin\mysqladmin -u root shutdown
4、 卸载服务
可以通过下面的命令卸载MySQL服务:installdir\mysql\bin\mysqld-nt –-remove。
经过上面的安装就可以使用了,可以把我们系统空的数据库内建到mySQL数据目录即可,缺省数据库目录在installdir\mysql\data。
访问MySQL数据库可以通过dbExpress组件,dbExpress组件是一组高效的数据库访问组件,只要改变连接串,我们就可以直接把数据源连接到MSSQLServer等数据库。

安装与卸载windows系统服务有专门软件,如果需要,mail to me:wangyihust@163.com


删除了原来的mysql4.1系统服务后,下载了一个5.0的non-install版本,将其添加到windows系统服务后,为什么无法启动?-1056错误

1.报错:Can't find messagefile 'F:\Program Files\mysql\share\english\errmsg.sys'


原因:原来的4.1版本安装在F:\Program Files\mysql目录;而现在的5.0版本在F:\database目录

解决方法:在c:\winnt\目录下找到my.ini文件,修改或删除之

2.报错:ready for connections.
Version: '5.0.21-community-nt' socket: '' port: 3306 MySQL Community Edition (GPL)

原因:socket为空,没有配置mysql;或者端口已经占用

解决方法: \mysql\bin目录下运行MySQLInstanceConfig.exe配置mysql实例


如何更改Win2000服务MySQL属性中的可执行文件路径!

开始时在D盘装了MySQL,后来卸载后,格式化D盘,再次安装,路径与原路径不同,不能通过“net start mysql”启动。查看win2000服务中MYsql的属性,可执行文件路径在位于D盘。现在怎么样更改,或者从服务项去掉Mysql?

注册表里HKEY_LOCAL_MECHINE---SYSTEM ---CurrentControlSet里

启动MYSQL服务时出错的几种解决方法

1
安装MYSQL后更改了ROOT的密码后用net startmysql启动时我就遇到了这样的问题.使用以下命令后c:\mysql\bin\mysqladmin-u root -p shutdown再net start mysql就没有这个错误提示了!


*************
2
MySQL的1067错误
Q:我的Mysql碰到了 1067 错误

错误信息为:
A system error has occurred.
System error 1067 has occurred.
The process terminated unexpectedly.

A:在我的机上的解决办法是:
修改%windir%\my.ini,增加
[mysqld]
#设置basedir指向mysql的安装路径
basedir=D:\Program\Tools\mysql
datadir=D:\Program\Tools\mysql\data


*************
3
已经弄好了!!!
好像是这样……
mysql_install_db 脚本只是在初次安装时才需要运行一次,之后就不用再运行了,不知道是不是这么回事.我把mysql.server拷贝至/etc/rc.d/init.d /中,运行chkconfig mysql.server,至此mysql服务器每次开机自动启动,只要设置好PATH,在命令行上输入mysql就一切 搞定!
看来摸索的过程实在是痛苦啊,这已经折磨我好几天了……

*************
4
问:我的Mysql碰到了 1067 错误

错误信息为:

A system error has occurred.
System error 1067 has occurred.
The process terminated unexpectedly.

答:
解决办法:

1.检查你的Mysql目录有没有给系统的System用户权限。
2.删除掉你的 %WINDOWS%/my.ini 文件。
3.检查你的 c:/my.cnf 文件配置是否正确。


*************
5
【☆☆☆ MySql概要说明 ☆☆☆】
MySql 的默认安装目录是c:mysql,安装结束后没有任何提示信息说安装结束,请点Finish按钮之类的话,直接就退出了。如果需要安装到其他目录,建议先 安装到c:mysql,然后再整个目录move到自己希望的地方,例如移动到d:mysql 之后,需要编辑 d:mysqlmy- example.cnf (*.cnf的文件在Windows 2000中会被注册成为 SpeedDial文件,在资源管理器中无法操作,要用命令行来 启动notepad编辑,例如运行notepadd:mysqlmy-example.cnf ,但是这个文件是UNIX系统下的文本文件格式,在 notepad中不能正确换行,可以用write打开编辑,
或者用write打开后保存一次,再用notepad就可以编辑了。)找到 basedir一行,去掉前面的“#”号注释,将后面的路径改为移动后的目录(目录分隔符要用斜线而不是反斜线),然后另存为:c:my.cnf 用服务 方式启动的MySql如果用 net stop mysql 来停止,会得到一条 出错消息,例如:

    C:>net stop mysql
    MySql 服务正在停止.
    系统出错。
    系统发生 1067 错误。
    进程意外终止。
    MySql 服务已成功停止。
这没有关系,MySql确实已经停止了。但是假如不希望看到任何出错消息 的话,可以用以下的命令来停止:
    C:>mysqlbinmysqladmin -u root shutdown
如果没有任何提示信息,说明MySql已经成功停止了。
需要说明的是MySql虽然号称安装简单,易于使用,但是这毕竟是基于SQL的数据库管理系统,所以如果不是对SQL十分精通的话恐怕也不能拿它来做什么

**************
6
mysql服务无法启动的解决方法
mysql服务无法启动

我的操作系统是 win xp
无论安装何版本的mysql,在管理工具的服务中启动mysql服务时都会在中途报错
内容为:在 本地计算机 无法启动mysql服务 错误1067:进程意外中止

经过多方求教,得解决方法如下

查找系统(后来验证应该为windows目录)目录下的my.ini文件,编辑内容(如果没有该文件,则新建一个),至少包含basedir,datadir这两个基本的配置。
[mysqld]
# set basedir to installation path, e.g., c:/mysql
# 设置为MYSQL的安装目录
basedir=D:/www/WebServer/MySQL
# set datadir to location of data directory,
# e.g., c:/mysql/data or d:/mydata/data
# 设置为MYSQL的数据目录
datadir=D:/www/WebServer/MySQL/data

另外,要主意
[WinMySQLadmin]
Server=D:/www/WebServer/MySQL/bin/mysqld-nt.exe
user=root
password=xxxxxxxx
#以上是设置WinMySQLadmin的配置
[Client]
user=root
password=xxxxxxxx

hehe~ 解决了

**************
7
刚刚弄好Mysql 『关键字 1067错误』
比较郁闷,竟然没有想到安装个Mysql也会出错,错误代码是1067 安装卸载了好几次,就是不行,而且把一些禁用了的服务都打开了,但是还是不行。最后我是这样解决的:

在C:\windows里找一找my.ini 然后删除 然后再启动winmysqladmin.exe界面配置mysql,保存my.ini就可以了 启动mysql试试 呵呵

***************
8
mysql 错误 1067: 进程意外终止
这 个问题困扰了一个早晨,非常郁闷!以前我在装mysql的时候从来没有遇到过,可是现在庄这个高版本的就有问题了,我换我装过的低版本的还是一样的问题 (最关键的是操作系统都是一样的)。在windows2000的服务里面启动mysql服务可是总是弹出“错误 1067: 进程意外终止”!

我 感觉问题在配置文件,于是就重新写了my.ini,启动还是一样的效果,我在google上查找无果,崩溃状态!就在此时眼前一亮,一位高人的指点是我豁 然开朗,你的ini文件有否放到windows目录下,我从个人目录的windows目录下,将其拷贝到系统windows目录下,启动服 务,ok!!!

我实在是不满足,为什么有不同呢,我的另外一台机子上装的是4.0.18的版本,它的my.ini就是放在用户目录下的 windows目录下的,而且也运行正常,我现在有点迷惘,人往往在解决了问题以后很少去思考,所以我现在有点想放弃的感觉,如果现在不会得到答案我想这 个在去思考解决基本上是不可能了