当前位置: 移动技术网 > IT编程>开发语言>Java > java利用url实现网页内容的抓取

java利用url实现网页内容的抓取

2019年07月22日  | 移动技术网IT编程  | 我要评论

乡愁四韵 吉他谱,601587,搜狗02kkk

闲来无事,刚学会把git部署到远程服务器,没事做,所以简单做了一个抓取网页信息的小工具,里面的一些数值如果设成参数的话可能扩展性能会更好!希望这是一个好的开始把,也让我对字符串的读取掌握的更加熟练了,值得注意的是java1.8 里面在使用string拼接字符串的时候,会自动把你要拼接的字符串用stringbulider来处理,大大优化了string 的性能,闲话不多说,show my xxx code~

运行效果:

首先打开百度百科,搜索词条,比如“演员”,再按f12查看源码

然后抓取你想要的标签,注入linkedhashmap里面就ok了,很简单是吧!看看代码罗

import java.io.bufferedreader;
import java.io.ioexception;
import java.io.inputstreamreader;
import java.net.httpurlconnection;
import java.net.url;
import java.util.*;
/**
 * created by chunmiao on 17-3-10.
 */
public class readbaidusearch {
 //储存返回结果
 private linkedhashmap<string,string> mapofbaike;
 //获取搜索信息
 public linkedhashmap<string,string> getinfomationofbaike(string infomationwords) throws ioexception {
  mapofbaike = getresult(infomationwords);
  return mapofbaike;
 }
 //通过网络链接获取信息
 private static linkedhashmap<string, string> getresult(string keywords) throws ioexception {
  //搜索的url
  string keyurl = "http://baike.baidu.com/search?word=" + keywords;
  //搜索词条的节点
  string startnode = "<dl class=\"search-list\">";
  //词条的链接关键字
  string keyofhref = "href=\"";
  //词条的标题关键字
  string keyoftitle = "target=\"_blank\">";
  string endnode = "</dl>";
  boolean isnode = false;
  string title;
  string href;
  string rline;
  linkedhashmap<string,string> keymap = new linkedhashmap<string,string>();
  //开始网络请求
  url url = new url(keyurl);
  httpurlconnection urlconnection = (httpurlconnection) url.openconnection();
  inputstreamreader inputstreamreader = new inputstreamreader(urlconnection.getinputstream(),"utf-8");
  bufferedreader bufferedreader = new bufferedreader(inputstreamreader);
  //读取网页内容
  while ((rline = bufferedreader.readline()) != null){
   //判断目标节点是否出现
   if(rline.contains(startnode)){
    isnode = true;
   }
   //若目标节点出现,则开始抓取数据
   if (isnode){
    //若目标结束节点出现,则结束读取,节省读取时间
    if (rline.contains(endnode)) {
     //关闭读取流
     bufferedreader.close();
     inputstreamreader.close();
     break;
    }
    //若值为空则不读取
    if (((title = getname(rline,keyoftitle)) != "") && ((href = gethref(rline,keyofhref)) != "")){
     keymap.put(title,href);
    }
   }
  }
  return keymap;
 }
 //获取词条对应的url
 private static string gethref(string rline,string keyofhref){
  string baikeurl = "http://baike.baidu.com";
  string result = "";
  if(rline.contains(keyofhref)){
   //获取url
   for (int j = rline.indexof(keyofhref) + keyofhref.length();j < rline.length()&&(rline.charat(j) != '\"');j ++){
    result += rline.charat(j);
   }
   //获取的url中可能不含baikeurl,如果没有则在头部添加一个
   if(!result.contains(baikeurl)){
    result = baikeurl + result;
   }
  }
  return result;
 }
 //获取词条对应的名称
 private static string getname(string rline,string keyoftitle){
  string result = "";
  //获取标题内容
  if(rline.contains(keyoftitle)){
   result = rline.substring(rline.indexof(keyoftitle) + keyoftitle.length(),rline.length());
   //将标题中的内容含有的标签去掉
   result = result.replaceall("<em>|</em>|</a>|<a>","");
  }
  return result;
 }
}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持移动技术网!

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网