此类作为本人练手图片爬虫。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=©right=&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+"张!==============>");
}
-------结束复制----------
上图为运行实例,不要把本人想的那么邪恶,本人只是欣赏,