java利用url实现网页内容的抓取
程序员文章站
2024-03-04 10:55:05
闲来无事,刚学会把git部署到远程服务器,没事做,所以简单做了一个抓取网页信息的小工具,里面的一些数值如果设成参数的话可能扩展性能会更好!希望这是一个好的开始把,也让我对字...
闲来无事,刚学会把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; } }
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!