java关键字批量下载百度图片,复制直接运行

此类作为本人练手图片爬虫。jar包你需要导入一个org.json,我用的是json-20180813.jar,直接全部复制到你的类直接运行,这CSND貌似代码块有限制,

-------开始复制--------

public static void main(String[] args) throws IOException, InterruptedException {
			//解析每一个图片地址
			Scanner sc = new Scanner(System.in,"GBK");
			String queryKey = "";
			String LocalPath =  new File("").getCanonicalPath()+"";
			System.out.println("请输入搜索关键字,如果不输入,默认(长腿大胸美女)输入完毕回车!:");
			queryKey = sc.nextLine();
			System.out.println("搜索图片关键字为:"+queryKey);
			if(queryKey.equals("")){
				queryKey="长腿大胸美女";
			}
			sc.close();
			//转URL编码
			String Urlencode = java.net.URLEncoder.encode(queryKey,"UTF-8");
			Map<String,String> map = getImgList(Urlencode);
			DownloadImg(map,LocalPath+"\\img");
			System.out.println("写入数据完成~!请在"+LocalPath+"\\img,查看获取的图片!");
	}
	private static Map<String,String> getImgList(String Urlencode) {
			Map<String,String> map = new HashMap<String,String>();
			int pageContent = 30;//从第30开始获取
			//获取到的数据不是空就正常获取数据
			while(true)
			{
				String jsonStr =getImgJson("https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord="+Urlencode+"&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=&z=&ic=&hd=&latest=&copyright=&word="+Urlencode+"&s=&se=&tab=&width=&height=&face=&istype=&qc=&nc=&fr=&expermode=&force=&pn="+pageContent+"&rn=30&gsm=&1575443652231=");
				JSONObject jo = new JSONObject(jsonStr);
				String dataJson = jo.get("data").toString();
				if(!dataJson.equals("[{}]"))
				{
					JSONArray array = new JSONArray(dataJson);
					
					for(int i=0;i<array.length();i++)
					{
						String jsonArr = getJsonImgArray(array.getJSONObject(i));//replaceUrl图片路径数组
						if(jsonArr!=null)
						{
							//获取图片地址
							String img_url = getImgUrl(jsonArr);
							//获取图片名称
							String img_name = array.getJSONObject(i).get("fromPageTitleEnc").toString();
							map.put(img_name, img_url);
						}
					}
					pageContent+=30;
					System.out.println("获取数据页数:"+pageContent);
				}else{
					break;
				}
			}
			return map;
	}
	//获取replaceUrl图片路径数组
	private static String getJsonImgArray(JSONObject jsonObject) {
		String str= null;
		try{
			 str = jsonObject.get("replaceUrl").toString();
		}catch(JSONException e){
			System.out.println("这个模块没有提供链接信息:跳过!");
		}
		return str;
	}
	//获取里面的图片路径
	private static String getImgUrl(String jsonStr) {
		//replaceUrl数组字符串
		JSONArray array = new JSONArray(jsonStr);
		try{
			return array.getJSONObject(1).get("ObjURL").toString();
		}catch(JSONException e){
			System.err.println("没有获取到图片链接地址!从第0开始获取:");
			return array.getJSONObject(0).get("ObjURL").toString();
		}
	}
	private static String getImgJson(String addr) {
		String jsonStr = "";
		try {
			URL url =new URL(addr);
			URLConnection conn = url.openConnection();
			BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(),"UTF-8"));
			String content = "";
			
			while((content=in.readLine())!=null){
				jsonStr+=content;
			}
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e){
			e.printStackTrace();
		}
		return jsonStr;
	}
	public static void DownloadImg(Map<String, String> map,String Save_FilePath){
		File file = new File(Save_FilePath);
		int error = 0;//错误条数
		if(!file.exists()){
			file.mkdirs();
		}
		
			for(String key : map.keySet()){
				if(map.get(key)!=null){
					try {
						//访问图片
						URL url_path=new URL(map.get(key));
						//打开与图片之间的连接
					    URLConnection conn = url_path.openConnection();
					    //获得与图片之间的通道
					    InputStream in = conn.getInputStream();
					    //接收数据的byte数组
					    byte[] b = new  byte[1024];
					    //每次读取的数据长度
					    int length;
					    OutputStream os = new FileOutputStream(Save_FilePath+"/"+key+".jpg");
					    //开始接收数据
					    while((length=in.read(b))!=-1){
					    	os.write(b, 0, length);;
					    }
					    os.close();
					    in.close();
						} catch (MalformedURLException e) {
							System.err.println("此网络图片路径URL异常:"+map.get(key)+"\n");
							error++;
						} catch(FileNotFoundException e){
							System.err.println("此网络图片未找到!:"+e.getMessage()+"\n");
							error++;
						} catch(UnknownHostException e){
							System.err.println("此网络图片未知域名:"+e.getMessage()+"\n");
							error++;
						} catch(SocketException e){
							System.err.println("此网络图片访问链接超时!:"+e.getMessage()+"\n");
							error++;
						} catch (IOException e){
							System.err.println("此网络图片保存失败,原因:"+e.getMessage()+"\n");
							error++;
						}
					System.out.println("下载:【"+key+"】图片到【"+Save_FilePath+"】成功!");
					System.out.println("");
				}
			}
			System.out.println("<=============本次处理共"+map.size()+"张图片!成功:"+(map.size()-error)+"张!失败:"+error+"张!==============>");
	}

-------结束复制----------
在这里插入图片描述
上图为运行实例,不要把本人想的那么邪恶,本人只是欣赏,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值