仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1151|回复: 18
打印 上一主题 下一主题

[学习教程] JAVA网页设计Java完成使用搜刮引擎搜集网址的程序

[复制链接]
因胸联盟 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:54:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
诸如RMI,EJB等一些技术并不是你说的那么复杂,而是它们把一些复杂的工具封装成不复杂的工具了,理解这些工具是需要些时间。我问你,.net里有这些工具吗?要简单多少?。程序|搜刮引擎我这里讲的不是怎样利用搜刮引擎,而是怎样让程序使用搜刮引擎来汇集网址,这有甚么用?很有效!网上动辄有人叫卖网址数据库,如公布软件网址、邮件地点、论坛网址、行业网址,这些网址是怎样来的呢?不成能是人手工搜集而来的,都是让程序使用搜刮引擎取到的,假如您必要某类网址信息数据,就跟我来一同研讨一下,十分复杂。

  本文彩用Java言语写成,以google和百度搜刮引擎为对象。

  我们要使用google、百度搜刮引擎的搜刮划定规矩中的两条,关头字搜刮和inurl搜刮。甚么是inurl搜刮,就是你所要搜刮的网址中自己带有的关头字,好比http://www.xxx.com/post.asp,这个网址就含有post.asp如许的关头字,在搜刮引擎中填写划定规矩是inurl:post.asp,这是搜集网址的关头,由于良多网址自己会带有特定的信息,好比软件公布的网页网址信息中多含有publish、submit、tuijian如许的信息,如http://www.xxx.com/publish.asp,如许的网址多是公布信息的网页,在分离网页中自己大概含有的关头字,就能够用搜刮引擎搜刮出了局,然后我们使用程序将了局取回,对HTML页面举行剖析,往除没有效的信息,将有效的网址信息写进文件大概数据库,就能够给别的使用程序大概人来利用了。

  第一步,用程序将搜刮了局取回,先以百度为例,好比我们要搜刮软件公布的网页,关头字接纳“软件公布版本inurl:publish.asp",先登录百度看看,将关头字写进,然后提交,在地点栏就会看到http://www.baidu.com/s?ie=gb2312&bs=%C8%ED%BC%FE%B7%A2%B2%BC+%C8%ED%BC%FE%B0%E6%B1%BE+inurl%3Apublish.asp&sr=&z=&cl=3&f=8&wd=%C8%ED%BC%FE%B7%A2%B2%BC+%B0%E6%B1%BE+inurl%3Apublish.asp&ct=0,中文关头字全都酿成编码了,没有干系,我们在程序中间接用中文也是能够的,个中多个关头字用+号相连,往失落一些没有效的信息,我们能够把地点优化成http://www.baidu.com/s?lm=0&si=&rn=20&ie=gb2312&ct=0&wd=软件公布+版本+inurl%3Apublish%2Easp&pn=0&cl=0,个中rn暗示一页显现几个了局,wd=暗示你要搜刮的关头字,pn暗示从第几条入手下手显现,这个pn将是我们程序轮回取了局的变量,每20条轮回一次。我们用Java写的程序来摹拟这个搜刮的历程,用到的关头类为java.net.HttpURLConnection,java.net.URL,先写一个提交搜刮的class,关头代码以下:

classSearch
{
 publicURLurl;
 publicHttpURLConnectionhttp;
 publicjava.io.InputStreamurlstream;
 ......
 for(inti=0;i++;i<100)
 {
  ......
  try{
   url=newURL("http://www.baidu.com/s?lm=0&si=&rn=20&ie=gb2312&ct=0&wd=软件公布+版本+inurl%3Apublish%2Easp&pn="+beginrecord+"&cl=0");
  }catch(Exceptionef){};
  try{
   http=(HttpURLConnection)url.openConnection();
   http.connect();
   urlstream=http.getInputStream();
  }catch(Exceptionef){};
  java.io.BufferedReaderl_reader=newjava.io.
  BufferedReader(newjava.io.InputStreamReader(urlstream));
  try{
   while((currentLine=l_reader.readLine())!=null){
    totalstring+=currentLine;
   }
  }catch(IOExceptionex3){}
  ....
  //本次搜刮的了局已放到totalstring中了,是一些HTML代码,必要下一步举行剖析了。
}
  再以google为例,略微有些分歧,google对扫瞄器举行了一些检测,编码也分歧,URL为http://www.google.com/search?q=软件公布+版本+inurl:publish.asp&hl=zh-CN&lr=&newwindow=1&start=0&sa=N&ie=UTF-8,个中编码要用ie=UTF-8,start暗示从第几笔记录显现,必要注重的是google对扫瞄器还要反省,假如扫瞄器不切合它的请求,将前往毛病代码,以是在摹拟扫瞄器提交中,我们要多加一行代码,修正关头部分要将http属性中的User-Agent设置为经常使用的扫瞄器,好比Mozilla/4.0,代码以下:

try{
 http=(HttpURLConnection)url.openConnection();
 http.setRequestProperty("User-Agent","Mozilla/4.0");
 http.connect();
 urlstream=http.getInputStream();
}catch(Exceptionef){};
  第二步,对取回的HTML编码举行剖析,掏出个中的有效网址信息,并写进文件大概数据库,因为这些搜刮引擎都有网页快照和类似网页等网址信息混同在HTML中,我们要将这些网址信息剔撤除,剔除的关头就是找出个中的纪律,百度搜刮引擎中的网页快照和别的没有效的的地点都含有baidu这个关头字,而google中含有的无用网址信息含有关头字google和cache,我们就依据这些关头字剔除无用网址信息。在Java中要对字符串举行剖析一定要用到java.util.StringTokenize这个类,用来将字符串以特定的分开符分隔,java.util.regex.Pattern和java.util.regex.Matcher用来婚配字符串,关头代码以下:

classCompareStr
{
 publicbooleancomparestring(Stringoristring,Stringtostring)
 {
  Patternp=null;//正则表达式
  Matcherm=null;//操纵的字符串
  booleanb;
  p=Pattern.compile(oristring,Pattern.CASE_INSENSITIVE);
  m=p.matcher(tostring);
  b=m.find();
  returnb;
 }
}

classAnalyUrl
{
 ......
 StringTokenizertoken=newStringTokenizer(totalstring,""");
 Stringfirstword;
 CompareStrcompstr=newCompareStr();
 Stringdsturl=null;
 while(token.hasMoreTokens())
 {
  firstword=token.nextToken();
  if(!compstr.comparestring("google.com",firstword)&&!compstr.comparestring("cache",firstword))
  {
   if(firstword.length()>7)
   {
    dsturl=firstword.substring(6,firstword.length()-1);
    WriteUrl(dsturl);//乐成取到URL,纪录到文件中
   }
  }
 }
}
  经由过程以上程序,我们就能够搜集到本人要的网址信息了,还能够再写别的一个使用程序,对搜集到的网址信息进一步剖析,掏出本人必要的信息,这里就不再包袱,事理都是一样的。最初需申明一点,google搜刮引擎搜刮所能前往的了局不克不及凌驾1000条,过了1000条,就间接提醒“对不起,Google为一切查询的了局数都不会凌驾1000个。”,百度搜刮引擎前往的了局不克不及凌驾700多条,以是我们要搜刮时尽量多加关头字,将了局局限减少。
学习JAVA的目的更多的是培养自身的工作能力,我觉得工作能力的一个核心就是:独立思考能力,因为只有独立思考后,才会有自己的见解
灵魂腐蚀 该用户已被删除
沙发
发表于 2015-1-21 16:54:15 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
柔情似水 该用户已被删除
板凳
发表于 2015-2-6 16:01:53 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
小妖女 该用户已被删除
地板
发表于 2015-2-7 20:15:10 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
小魔女 该用户已被删除
5#
发表于 2015-2-23 09:37:59 | 只看该作者
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
第二个灵魂 该用户已被删除
6#
发表于 2015-3-7 06:44:35 | 只看该作者
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
飘灵儿 该用户已被删除
7#
发表于 2015-3-14 12:38:51 | 只看该作者
是一种语言,用以产生「小应用程序(Applet(s))
变相怪杰 该用户已被删除
8#
发表于 2015-3-21 07:50:23 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
爱飞 该用户已被删除
9#
发表于 2015-3-22 23:55:18 | 只看该作者
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
海妖 该用户已被删除
10#
发表于 2015-3-24 02:11:02 | 只看该作者
是一种使用者不需花费很多时间学习的语言
莫相离 该用户已被删除
11#
发表于 2015-4-6 05:29:40 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
深爱那片海 该用户已被删除
12#
发表于 2015-4-10 08:36:16 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
13#
发表于 2015-4-17 03:10:41 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
若天明 该用户已被删除
14#
发表于 2015-5-3 16:32:10 | 只看该作者
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
只想知道 该用户已被删除
15#
发表于 2015-5-6 09:12:45 | 只看该作者
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
若相依 该用户已被删除
16#
发表于 2015-6-7 23:48:15 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
飘飘悠悠 该用户已被删除
17#
发表于 2015-6-10 01:45:20 | 只看该作者
是一种语言,用以产生「小应用程序(Applet(s))
再见西城 该用户已被删除
18#
发表于 2015-6-23 23:24:41 | 只看该作者
你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
再现理想 该用户已被删除
19#
发表于 2015-6-25 10:08:44 | 只看该作者
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-13 20:00

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表