知识大全 用Java+MySQL+PHP轻松构建跨平台的搜索引擎
Posted 知
篇首语:亦余心之所善兮,虽九死其犹未悔。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 用Java+MySQL+PHP轻松构建跨平台的搜索引擎相关的知识,希望对你有一定的参考价值。
用Java+MySQL+PHP轻松构建跨平台的搜索引擎 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
此搜索引擎适于在一个中等规模的局域网中使用 由于找到的网页存在数据库中 不仅可以索静态的HTML页面 可以搜索php asp等动态页面 对于一个拥有 万个网页的系统(使用PII 作为服务器) 搜索响应时间在 秒左右 完全可以满足要求 由于Java MySQL PHP都是跨平台的软件 所以此搜索引擎不仅可以工作在Windows服务器上 而且也可以工作在Linux等其他系统中 一 建立搜索引擎需要的数据库和数据表 首先建立数据库 c:\\mysql\\bin\\> mysqladmin uroot pmypasswd create Spider 然后建立数据库中的表结构 c:\\mysql\\bin\\> mysql uroot pmypasswd Spider < Spider mysql 其中Spider mysql为一个文本文件 其内容如下 CREATE TABLE link ( Id int( ) unsigned NOT NULL auto_increment Url varchar( ) NOT NULL Class tinyint( ) unsigned NOT NULL default IsSearchLink tinyint( ) unsigned default PRIMARY KEY (Url) UNIQUE Id (Id) KEY Url (Url) KEY Class (Class) ); # 本局域网的初始主页地址 搜索蜘蛛从此网址开始搜索所有其他网页 INSERT INTO link VALUES( HTTP:// / ); # 数据表 webpagelocal 用来存放下载的所有的网页 CREATE TABLE webpagelocal ( Id int( ) unsigned NOT NULL auto_increment Url varchar( ) NOT NULL Content text NOT NULL PRIMARY KEY (Url) UNIQUE Id (Id) KEY Url (Url) ); # 数据表 webpagefindfast # 用MakeFast php从表webpagelocal中提取 字节的检索信息存放其中 CREATE TABLE webpagefindfast ( Id int( ) unsigned NOT NULL Url varchar( ) NOT NULL Title varchar( ) Content blob PRIMARY KEY (Url) KEY Url (Url) KEY Title (Title) ); 二 以下为搜索网页和下载网页至本地数据库的Java程序LinkToDB java 它也是此搜索引擎的核心和基础 /***************************** LinkToDB java *********************************** * * 对URL中的链接进行分析 将相对路径转换为绝对路径 排序方式输出结果到数据库 * * 如果分析得到的URL是Link表中唯一的 就将其内容下载到表 WebPageLocal 中 * ******************************************************************************** / import java io *; import java util *; import *; import java lang String; import java sql *; import java text *; class Counter private int i = ; int read() return i; void increment() i++; public class LinkToDB String UrlHost = ; String UrlFile = ; String UrlPath = ; static String StartWith = null; boolean outsideTag = true; //判断是否在标记之中 static char[] buffer = new char[ ]; // 缓冲区:用于保存从 URL 读的数据 InputStreamReader read = null; BufferedReader reader = null; URLConnection uc = null; private URL url = null; private StreamTokenizer st; private TreeMap counts = new TreeMap();//以排序方式保存找到的链接 LinkToDB(String myurl String StartOnly) try StartWith = StartOnly; if(StartOnly!=null) if(!myurl startsWith(StartOnly)) return; //只搜索此网站 url = new URL(myurl); UrlHost = url getHost(); UrlHost = UrlHost toUpperCase(); UrlFile = url getFile(); int v=UrlFile lastIndexOf( / ); if(v!= ) UrlPath = UrlFile substring( v); System out println( 分析文件 +myurl); int uclength= ; int ucError= ; try uc = url openConnection(); uc setUseCaches(false); nnect(); catch(IOException io) ucError= ; System out println( 打不开待分析网页: +myu rl); if(ucError!= ) uclength = uc getContentLength(); if (uclength< ) try read = new InputStreamReader(url openStream()); catch(IOException io) System out println( 流打开错误: +myurl); else System out println( 文件太大 不分析 ); if(read!=null) reader=new BufferedReader(read); if(reader!=null) st = new StreamTokenizer(reader); st resetSyntax(); // 重置语法表 st wordChars( ); // 令牌范围为全部字符 st ordinaryChar( < ); // HTML标记两边的分割符 st ordinaryChar( > ); catch(MalformedURLException e) System out println( Malformed URL String! ); void cleanup() try read close(); catch(IOException e) System out println( 流关闭错误 ); void countWords() try while(st nextToken()!=StreamTokenizer TT_EOF) String s = ; String s_NoCase= ; switch(ype) case < : //入标记字段 outsideTag=false; continue; //countWords(); case > : //出标记字段 outsideTag=true; continue; //countWords(); case StreamTokenizer TT_EOL: s = new String( EOL ); break; case StreamTokenizer TT_WORD: if(!outsideTag) s = st sval; /*已经是字符 串*/ break; default: s = ;// s = String valueOf((char)ype);/*单一字符*/ if(outsideTag) continue;//出了标记区域(<a >) String s = ; s_NoCase = s trim(); s =s_NoCase toUpperCase(); if(s startsWith( A )||s startsWith( AREA )||s startsWith( FRAME )||s s tartsWith( IFRAME )) //以这些开始的都是超级链接 int HREF_POS = ; if(s startsWith( FRAME )||s startsWith( IFRAME )) HREF_POS = s indexOf( SRC= ); s = s substring(HREF_POS+ ) trim(); s_NoCase=s_NoCase substring(HREF_POS+ ) trim(); else HREF_POS=s indexOf( HREF= ); s =s substring(HREF_POS+ ) trim(); s_NoCase=s_NoCase substring(HREF_POS+ ) trim(); if(HREF_POS!= ) if(s startsWith( \\ )) s =s substring( );s_NoCase=s_NoCase substring( ); int QUOTE=s indexOf( \\ ); if(QUOTE!= ) s =s substring( QUOTE) trim();s_NoCase=s_NoCase substring( QUOTE) trim (); int SPACE=s indexOf( ); if(SPACE!= ) s =s substring( SPACE) trim();s_NoCase=s_NoCase substring( SPACE) trim (); if(s endsWith( \\ )) s =s substring( s length() );s_NoCase=s_NoCase substring( s_NoCase l ength() ); if(s indexOf( )!= ||s indexOf( JAVASCRIPT: )!= ||s indexOf( )!= ) s = ;s_NoCase= ; //有这些符号 认为非合法链接 两点表示上一目录 而我 只想向下级查找 if ( !s startsWith( FTP:// ) &&//以下后缀或前缀通常非网页格式 !s startsWith( FTP:// ) && !s startsWith( MAILTO: ) && !s endsWith( SWF ) && !s startsWith( / )) //因 /表示上一目录 通常只需考虑本级和下N级目录 s=s ; if (!s startsWith( HTTP:// )&&!s equals( )) s=UrlHost+UrlPath+ / +s;s_No Case=UrlHost+UrlPath+ / +s_NoCase; else if(s startsWith( / )) s=UrlHost+s;s_NoCase=UrlHost+s_NoCase; if(s startsWith( HTTP:// )) s=s substring( );s_NoCase=s_NoCase substring( ); int JinHao=s indexOf( # ); //如果含有 # 号 表示有效的链接是此前的部分 if(JinHao!= ) s=s substring( JinHao) trim();s_NoCase=s_NoCase substring( JinHao) trim(); int H= ; //以下将/ /转换为/ for(int m= ;m< ;m++) H=s indexOf( / / ); if(H!= ) s=s substring( H)+s substring(H+ );s_NoCase=s_NoCase substring ( H)+s_NoCase substring(H+ ); int TwoXG= ; //以下将//转换为/ for(int m= ;m< ;m++) TwoXG=s indexOf( // ); if(TwoXG!= ) s=s substring( TwoXG)+s substring(TwoXG+ );s_NoCase=s_NoCa se substring( TwoXG)+s_NoCase substring(TwoXG+ ); int OneXG=s indexOf( / ); if(OneXG== ) s=s+ / ;s_NoCase+= / ; //将xx xx xx xxx转换为xx xx xx xxx/的 标准形式 cha138/Article/program/Java/JSP/201311/19732相关参考
知识大全 在windows平台上构建自己的PHP实现方法(仅适用于php5.2)
在windows平台上构建自己的PHP实现方法(仅适用于php5.2) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶
轻松实现Java用户界面编程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Buoy是一个构建在
用MySQL和PHP创建XML 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! XML是作为数据交
用PHP连mysql和oracle数据库性能比较 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
用JavaServlet构建旗帜广告系统 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 对于一个
使用PHP5.0轻松解析XML文档(1) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 用sax
我的php和mysql的软件包是phpplWinzipmysqlbetawinzip 先安装mysql用winzip打开软件包进行完全安装默认安装路径为:c:\\mysql 安装完成后打开开始
知识大全 mac下配置nginx+php+mysql方法说明
本文章来给各位同学介绍mac下配置nginx+php+mysql方法有需要了解的同学可进入参考额本来以为mac下可以用lnmp一键安装包的但是使用后才发现竟然不行后来使用了大家都推荐的homebrew
用PHP+java实现自动新闻滚动窗口 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! showp
从MySQL导出XLS数据库工具(跨平台) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 这个脚