基于java的数据处理的简单爬虫项目

基于java的数据处理的爬虫项目

	用eclipse做一个简单的java爬虫项目,爬取百度搜索到的桔梗图片

先上百度图片里找到桔梗图片

图片链接
F12可以找到图片的地址,正则表达式将会用到。
①在eclipse新建JAVA项目与包“爬取图片”。
在这里插入图片描述
②在包中新建一个类,命名为Pac1
③在我的电脑C:\Users\cjy\Pictures\picture路径下创建一个文本文件,命名为123.txt。
④在类Pac1中新建代码

package 爬取图片;

//导入
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import java.util.HashSet;
import java.util.Iterator;  //迭代器
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
public class Pac1 {
	
	//按F12打开网页源代码;找到图片容器。
	//https://image.baidu.com/search/index?tn=baiduimage&ct=201326592&lm=-1&cl=2&ie=gb18030&word=%BD%DB%B9%A3&fr=ala&ala=1&alatpl=adress&pos=0&hs=2&xthttps=111111
	//下载整个页面
	
	static String url1="https://image.baidu.com/search/index?tn=baiduimage&ct=201326592&lm=-1&cl=2&ie=gb18030&word=%BD%DB%B9%A3&fr=ala&ala=1&alatpl=adress&pos=0&hs=2&xthttps=111111";
    public static void main(String[] args) throws FileNotFoundException {
		File file=new File("C:\\Users\\cjy\\Pictures\\picture\\123.txt");  //文件目录
		try{URL url2=new URL(url1);  //url访问链接
		URLConnection con=url2.openConnection();
		BufferedReader bu=new BufferedReader(new InputStreamReader(con.getInputStream()));  //字符缓冲输入
		FileOutputStream fi =new FileOutputStream(file);
		BufferedWriter bf=new BufferedWriter(new OutputStreamWriter(fi)); 字符缓冲输出
		
		while(bu.readLine() != null) {
			String str=bu.readLine();
			bf.write(str);
			bf.flush();  //等待刷新
		}
		bf.flush();
		bu.close();
		bf.close();
		}catch (Exception e) {    //异常处理
			// TODO: handle exception
		}
		
		//https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1646499984,4199068640&fm=26&gp=0.jpg
		//通过正则表达式:"https://ss\\d+\\.bdstatic\\.com\\S+\\.jpg",匹配图片链接,并存储到一个set集合中。
		
		String patter="https://ss\\d+\\.bdstatic\\.com\\S+\\.jpg";
		BufferedReader bu1=new BufferedReader(new InputStreamReader(new FileInputStream(file)));
		Pattern p = Pattern.compile(patter);   //匹配
		int i=0;
		String str1=null;
		StringBuilder str2=new StringBuilder();
		
		HashSet<String> set=new HashSet<String>();//创建set集合对象
		try {
			while((str1=bu1.readLine())!=null) {
				str2.append(str1); //追加指定str	
			}
			Matcher m = p.matcher(str2);  //匹配
			while(m.find()) {  //去重
	        	m.start();
	        	set.add(m.group());
	        	i++;
			}
	        bu1.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}	
		
		//set集合遍历
		
		 Iterator<String>  it = set.iterator();
		 int cout=0;
		while(it.hasNext()) {
			cout++;
			try {
				String string=it.next().toString();
				new Matchtest(string, cout);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();  //流异常
			}
		}
    }
}

创建另一个类Matchtest用来从存储的set集合中读取图片URL并下载到本地

package 爬取图片;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

//从存储的set集合中读取图片URL并下载到本地
//先写一张下载IO类,从set集合中每取一个出来就new 一个下载类。
 
public class Matchtest {
 
	public Matchtest(String str1,int i) throws IOException {
		// TODO Auto-generated method stub
		File test=new File("C:\\Users\\cjy\\Pictures\\picture");
		if(!test.exists()) {
			test.mkdir();
		}
        File file=new File("C:\\Users\\cjy\\Pictures\\picture\\"+"第"+i+"张"+".jpg");
        URL url = null;
		try {
			url = new URL(str1);
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		URLConnection con = null;
		try {
			con = url.openConnection();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		 InputStream io=con.getInputStream();
		FileOutputStream fi = null;
		try {
			fi = new FileOutputStream(file);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			byte[] buf = new byte[1024];
			int len = 0;
			while((len=io.read(buf)) != -1) {
				
				fi.write(buf, 0, len);
				
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		fi.close();
		io.close();
        
	}
 
}
  

保存以后就可以执行了,效果如下:

在这里插入图片描述

代码的注释一些已经做过标注。图片的下载路径需要是自己的路径,还有创建.txt文件用来保存下载出来的网页内容。
感谢大佬和前辈们在评论区的指点

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值