• 怎么实现利用Java搜索引擎收集网址的程序


    我这里讲的不是怎样运用查找引擎,而是怎样让顺序使用查找引擎来搜集网址,这有什么用?很有用!网上动辄有人叫卖网址数据库,如发布软件网址、邮件地址、论坛网址、职业网址,这些网址是怎样来的呢?不能够是人手艺搜集而来的,都是让顺序使用查找引擎取到的,若是您需求某类网址信息数据,就跟我来一同研究一下,十分简略。

      本文选用Java言语写成,以谷歌和baidu查找引擎为目标。

      咱们要使用谷歌、baidu查找引擎的查找规矩中的两条,要害词查找和inurl查找。什么是inurl查找,就是你所要查找的网址中自身带有的要害词,比方http://www.xxx.com/post.asp ,这个网址就富含post.asp这样的要害词,在查找引擎中填写规矩是 inurl:post.asp,这是搜集网址的要害,因为许多网址自身会带有特定的信息,比方软件发布的网页网址信息中多富含 publish、submit、tuijian这样的信息,如http://www.xxx.com/publish.asp,这样的网址多是发布信息的网页,在联系网页中自身能够富含的要害词,就可以用查找引擎查找出成果,然后咱们使用顺序将成果取回,对HTML页面进行剖析,去掉没有用的信息,将有用的网址信息写入文件或许数据库,就可以给其它应用顺序或许人来运用了。

      第一步,用顺序将查找成果取回,先以baidu为例,比方咱们要查找达内软件发布的网页,要害词选用 “软件发布 版别 inurl:publish.asp",先登录baidu看看,将要害词写入,然后提交,在地址栏就会看到 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,要害代码如下: 

      class Search
      {
      public URL url;
      public HttpURLConnection http;
      public java.io.InputStream urlstream;
      ......
      for(int i=0;i++;i<100)
      {
      ......
      try {
      url = new URL("http://www.baidu.com/s?lm=0&si=&rn=20&ie=gb2312&ct=0&wd=软件发布+版别+inurl%3Apublish%2Easp&pn="+beginrecord+"&cl=0"); 
      }catch(Exception ef){};
      try {
      http = (HttpURLConnection) url.openConnection();
      http.connect();
      urlstream = http.getInputStream();
      }catch(Exception ef){};
      java.io.BufferedReader l_reader = new java.io.
      BufferedReader(new java.io.InputStreamReader(urlstream));
      try {
      while ((currentLine = l_reader.readLine()) != null) {
       totalstring += currentLine;
      }
      } catch (IOException ex3) {} 
      .... 
      //本次查找的成果现已放到totalstring中了,是一些HTML代码,需求下一步进行剖析了。
      } 

      再以谷歌为例,略微有些不相同,谷歌对浏览器进行了一些检测,编码也不相同,URL为http://www.谷歌.com/search?q=软件发布+版别+inurl:publish.asp&hl=zh-CN&lr=&newwindow=1&start=0&sa=N&ie=UTF-8,其间编码要用ie=UTF-8,start表明从第几条记载显现,需求注重的是谷歌对浏览器还要查看,若是浏览器不符合它的需求,将回来错误代码,所以在模仿浏览器提交中,咱们要多加一行代码,修正要害有些要将http特点中的User-Agent设置为常用的浏览器,比方Mozilla/4.0,代码如下:

      try {
      http = (HttpURLConnection) url.openConnection();
      http.setRequestProperty("User-Agent", "Mozilla/4.0");
      http.connect();
      urlstream = http.getInputStream();
      }catch(Exception ef){}; 

      第二步,对取回的HTML编码进行剖析,取出其间的有用网址信息,并写入文件或许数据库,因为这些查找引擎都有网页快照和类似网页等网址信息稠浊在HTML中,咱们要将这些网址信息除掉去,除掉的要害就是找出其间的规则,baidu查找引擎中的网页快照和其它没有用的的地址都富含baidu这个要害词,而谷歌中富含的无用网址信息富含要害词 谷歌和cache,咱们就依据这些要害词除掉无用网址信息。在Java中要对字符串进行剖析必定要用到java.util.StringTokenize这个类,用来将字符串以特定的分隔符分隔,java.util.regex.Pattern和java.util.regex.Matcher用来匹配字符串,要害代码如下:


      class CompareStr
      {
      public boolean comparestring(String oristring,String tostring)
      {
      Pattern p=null; //正则表达式 
      Matcher m=null; //操作的字符串
      boolean b;
      p = Pattern.compile(oristring,Pattern.CASE_INSENSITIVE);
      m = p.matcher(tostring);
      b = m.find();
      return b;
      }
      }

      class AnalyUrl
      {
      ......
      StringTokenizer token = new StringTokenizer(totalstring,"<> "");
      String firstword;
      CompareStrcompstr = new CompareStr();
      String dsturl = null;
      while (token.hasMoreTokens()) 
      {
      firstword = token.nextToken(); 
      if (!compstr.comparestring("谷歌.com", firstword) && !compstr.comparestring("cache",firstword)) 
      {
      if (firstword.length() > 7)
      {
       dsturl = firstword.substring(6,firstword.length() - 1); 
       WriteUrl(dsturl); //成功取到URL,记载到文件中
      }
      }
      } 
      } 

      经过以上顺序,咱们就可以搜集到本人要的网址信息了,还可以再写别的一个应用顺序,对搜集到的网址信息进一步剖析,取出本人需求的信息,这里就不再负担,道理都是相同的。最终需阐明一点,谷歌查找引擎查找所能回来的成果不能超越1000条,过了1000条,就直接提示“对不住,Google 为一切查询的成果数都不会超越 1000 个。”,baidu查找引擎回来的成果不能超越700多条,所以咱们要查找时尽能够多加要害词,将成果规模减少。 

  • 相关阅读:
    Executors几种常用的线程池性能比较
    mac上利用minikube搭建kubernetes(k8s)环境
    基于redis的分布式锁二种应用场景
    alibaba canal安装笔记
    开源流媒体服务器SRS学习笔记(4)
    开源流媒体服务器SRS学习笔记(3)
    pygame-KidsCanCode系列jumpy-part18-背景滚动
    开源流媒体服务器SRS学习笔记(2)
    开源流媒体服务器SRS学习笔记(1)
    pygame-KidsCanCode系列jumpy-part17-mask-collide碰撞检测
  • 原文地址:https://www.cnblogs.com/javaitpx/p/2762006.html
Copyright © 2020-2023  润新知