java 爬取网页的数据_java爬取网页数据

最近使用java实现了一个简单的网页数据抓取,下面是实现原理及实现代码:

原理:使用java.net下面的URL对象获取一个链接,下载目标网页的源代码,利用jsoup解析源代码中的数据,获取你想要的内容

1.首先是根据网址下载源代码:

/*** 根据网址和编码下载源代码

*@paramurl 目标网址

*@paramencoding 编码

*@return

*/

public staticString getHtmlResourceByURL(String url,String encoding){//存储源代码容器

StringBuffer buffer = newStringBuffer();

URL urlObj= null;

URLConnection uc= null;

InputStreamReader isr= null;

BufferedReader br=null;try{//建立网络连接

urlObj = newURL(url);//打开网络连接

uc =urlObj.openConnection();//建立文件输入流

isr = newInputStreamReader(uc.getInputStream(),encoding);

InputStream is=uc.getInputStream();//建立文件缓冲写入流

br = newBufferedReader(isr);

FileOutputStream fos= new FileOutputStream("F:\\java-study\\downImg\\index.txt");//建立临时变量

String temp = null;while((temp = br.readLine()) != null){

buffer.append(temp+ "\n");

}//fos.write(buffer.toString().getBytes());//fos.close();

} catch(MalformedURLException e) {

e.printStackTrace();

System.out.println("网络不给力,请检查网络设置。。。。");

}catch(IOException e){

e.printStackTrace();

System.out.println("你的网络连接打开失败,请稍后重新尝试!");

}finally{try{

isr.close();

}catch(IOException e) {

e.printStackTrace();

}

}returnbuffer.toString();

}

2.根据下载源代码解析数据,获取你想要的内容,这里我获取的是图片,你也可以获取贴吧里邮箱,电话号码等

/*** 获取图片路劲

*@paramurl 网络路径

*@paramencoding 编码*/

public static voiddownImg(String url,String encoding){

String resourceByURL=getHtmlResourceByURL(url, encoding);//2.解析源代码,根据网络图像地址,下载到服务器

Document document =Jsoup.parse(resourceByURL);//获取页面中所有的图片标签

Elements elements = document.getElementsByTag("img");for(Element element:elements){//获取图像地址

String src = element.attr("src");//包含http开头

if (src.startsWith("http") && src.indexOf("jpg") != -1) {

getImg(src,"F:\\java-study\\downImg");

}

}

}

3.根据获取的图片路径,下载图片,这里我下载的是携程网的内容

/*** 下载图片

*@paramimgUrl 图片地址

*@paramfilePath 存储路劲

**/

public static voidgetImg(String imgUrl,String filePath){

String fileName= imgUrl.substring(imgUrl.lastIndexOf("/"));try{//创建目录

File files = newFile(filePath);if (!files.exists()) {

files.mkdirs();

}//获取地址

URL url = newURL(imgUrl);//打开连接

HttpURLConnection connection =(HttpURLConnection) url.openConnection();//获取输入流

InputStream is =connection.getInputStream();

File file= new File(filePath +fileName);//建立问价输入流

FileOutputStream fos = newFileOutputStream(file);int temp = 0;while((temp = is.read()) != -1){

fos.write(temp);

}

is.close();

fos.close();

}catch(Exception e) {

e.printStackTrace();

}

}

最后是调用过程

public static voidmain(String[] args) {//1.根据网址和页面编码集获取网页源代码

String encoding = "gbk";

String url= "http://vacations.ctrip.com/";//2.解析源代码,根据网络图像地址,下载到服务器

downImg(url, encoding);

}

总结:根据上面的实现的简单数据爬取,存在着一些问题,我爬取的旅游页面有很多图片,根据img属性获取其src中的地址,从而下载该图片,但是该页面有很多图片,结果自己却只能爬到一小部分,如下图:

07255c02fdfcd5185d685ce8d30949ba.png

我将下载的源代码写入文件,和原网页中做对比,基本上页面旅游的图片一张没有,源代码中也没有,不知道为什么,请求广大网友的解答

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页