这篇文章介绍如何利用java中url实现网页内容的抓取
闲来无事,刚学会把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;
}
}
以上就是如何利用java中url实现网页内容的抓取的详细内容。