首先是对知识点归纳

1.用到获取网页源代码,分析图片地址,发现图片的地址都是按编号排列的,所以想到用循环获取

2.保存图片要用到流操作和文件操作,对两部分知识进行了复习巩固

3.保存后的图片有一部分是广告文字,所以我又看了一下如何截取图片

下面上代码:

网页源代码不粘贴了

对网页源代码分析之后进行循环提取图片链接并下载:

 package 文件操作;

 import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL; public class Pic696 { public static void main(String[] args) {
for(int i =1;i<72;i++) {
for (int j =1; j < 50; j++) { if(i<10&&j<10) {
String strUrl ="https://mmslt1.com/tp/girl/FEILIN/A-00"+i+"/0"+j+".jpg";
// System.out.println(i+" "+j);
System.out.println(strUrl);
URL url;
try {
url = new URL(strUrl);
try {
Pig(url, i, j);
} catch (IOException e) {
System.out.println("404");
}
} catch (MalformedURLException e) { } }
if(i<10&&j>=10) {
String strUrl ="https://mmslt1.com/tp/girl/FEILIN/A-00"+i+"/"+j+".jpg";
// System.out.println(i+" "+j);
System.out.println(strUrl);
URL url;
try {
url = new URL(strUrl);
try {
Pig(url, i, j);
} catch (IOException e) {
System.out.println("404");
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
if(i>=10&&j<10) {
String strUrl ="https://mmslt1.com/tp/girl/FEILIN/A-0"+i+"/0"+j+".jpg";
// System.out.println(i+" "+j);
System.out.println(strUrl);
URL url;
try {
url = new URL(strUrl);
try {
Pig(url, i, j);
} catch (IOException e) {
System.out.println("404");
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
if(i>=10&&j>=10) {
String strUrl ="https://mmslt1.com/tp/girl/FEILIN/A-0"+i+"/"+j+".jpg";
// System.out.println(i+" "+j);
System.out.println(strUrl);
URL url;
try {
url = new URL(strUrl);
try {
Pig(url, i, j);
} catch (IOException e) {
System.out.println("404");
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
}
} } static void Pig(URL urlStr,int i,int j) throws IOException {
//构造连接
HttpURLConnection conn = (HttpURLConnection)urlStr.openConnection();
conn.setRequestMethod("GET");
//这个网站要模拟浏览器才行
conn.setRequestProperty("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0");
//打开连接
conn.connect(); //打开这个网站的输入流
InputStream inStream = conn.getInputStream();
//用这个做中转站 ,把图片数据都放在了这里,再调用toByteArray()即可获得数据的byte数组
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
//用这个是很好的,不用一次就把图片读到了文件中
//要是需要把图片用作其他用途呢?所以直接把图片的数据弄成一个变量,十分有用
//相当于操作这个变量就能操作图片了 byte [] buf = new byte[1024];
//为什么是1024?
//1024Byte=1KB,分配1KB的缓存 int len = 0; //读取图片数据
while((len=inStream.read(buf))!=-1){
// System.out.println(len);
outStream.write(buf,0,len);
}
inStream.close();
outStream.close(); //把图片数据填入文件中
// File files = new File("E://Pic696");
// files.mkdirs();
File file = new File("E://Pic696/Pic"+i+"_"+j+".jpg"); FileOutputStream op = new FileOutputStream(file); op.write(outStream.toByteArray()); op.close();
}
}

对下载下来的图片进行截取(获取原来的尺寸,减掉一部分)

 package 文件操作;

 import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Iterator; import javax.imageio.ImageIO;
import javax.imageio.ImageReadParam;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
import javax.swing.ImageIcon; public class cityScore { public static void main(String[] args) {
for (int i = 1; i < 10; i++) {
for (int j = 1; j < 40; j++) {
String OldPic ="E:/Pic696/Pic"+i+"_"+j+".jpg";
String NewPic ="E:/Pic696/new/Pic"+i+"_"+j+".jpg";
ImageIcon imageIcon = new ImageIcon(OldPic);
int iconWidth = imageIcon.getIconWidth();
int iconHeight =imageIcon.getIconHeight();
cutImage(OldPic, NewPic,iconWidth, iconHeight-70);
}
} } /**
* 图片裁剪
* @param srcImageFile 图片裁剪地址
* @param result 图片输出文件夹
* @param destWidth 图片裁剪宽度
* @param destHeight 图片裁剪高度
*/
public final static void cutImage(String srcImageFile, String result,
int destWidth, int destHeight) {
try {
Iterator iterator = ImageIO.getImageReadersByFormatName("JPEG");/*PNG,BMP*/
ImageReader reader = (ImageReader)iterator.next();/*获取图片尺寸*/
InputStream inputStream = new FileInputStream(srcImageFile);
ImageInputStream iis = ImageIO.createImageInputStream(inputStream);
reader.setInput(iis, true);
ImageReadParam param = reader.getDefaultReadParam();
Rectangle rectangle = new Rectangle(0,0, destWidth, destHeight);/*指定截取范围*/
param.setSourceRegion(rectangle);
BufferedImage bi = reader.read(0,param);
ImageIO.write(bi, "JPEG", new File(result));
} catch (Exception e) {
System.out.println(e);
}
}
}

java爬取猫咪上的图片的更多相关文章

  1. python批量爬取猫咪图片

    不多说直接上代码 首先需要安装需要的库,安装命令如下 pip install BeautifulSoup pip install requests pip install urllib pip ins ...

  2. 【Python3 爬虫】14_爬取淘宝上的手机图片

    现在我们想要使用爬虫爬取淘宝上的手机图片,那么该如何爬取呢?该做些什么准备工作呢? 首先,我们需要分析网页,先看看网页有哪些规律 打开淘宝网站http://www.taobao.com/ 我们可以看到 ...

  3. Java爬取B站弹幕 —— Python云图Wordcloud生成弹幕词云

    一 . Java爬取B站弹幕 弹幕的存储位置 如何通过B站视频AV号找到弹幕对应的xml文件号 首先爬取视频网页,将对应视频网页源码获得 就可以找到该视频的av号aid=8678034 还有弹幕序号, ...

  4. Java爬取网络博客文章

    前言 近期本人在某云上购买了个人域名,本想着以后购买与服务器搭建自己的个人网站,由于需要筹备的太多,暂时先搁置了,想着先借用GitHub Pages搭建一个静态的站,搭建的过程其实也曲折,主要是域名地 ...

  5. Java爬取校内论坛新帖

    Java爬取校内论坛新帖 为了保持消息灵通,博主没事会上上校内论坛看看新帖,作为爬虫爱好者,博主萌生了写个爬虫自动下载的想法. 嗯,这次就选Java. 第三方库准备 Jsoup Jsoup是一款比较好 ...

  6. java爬取网页内容 简单例子(2)——附jsoup的select用法详解

    [背景] 在上一篇博文java爬取网页内容 简单例子(1)——使用正则表达式 里面,介绍了如何使用正则表达式去解析网页的内容,虽然该正则表达式比较通用,但繁琐,代码量多,现实中想要想出一条简单的正则表 ...

  7. java爬取网页内容 简单例子(1)——使用正则表达式

    [本文介绍] 爬取别人网页上的内容,听上似乎很有趣的样子,只要几步,就可以获取到力所不能及的东西,例如呢?例如天气预报,总不能自己拿着仪器去测吧!当然,要获取天气预报还是用webService好.这里 ...

  8. java爬取并下载酷狗TOP500歌曲

    是这样的,之前买车送的垃圾记录仪不能用了,这两天狠心买了好点的记录仪,带导航.音乐.蓝牙.4G等功能,寻思,既然有这些功能就利用起来,用4G听歌有点奢侈,就准备去酷狗下点歌听,居然都是需要办会员才能下 ...

  9. Java爬取同花顺股票数据(附源码)

    最近有小伙伴问我能不能抓取同花顺的数据,最近股票行情还不错,想把数据抓下来自己分析分析.我大A股,大家都知道的,一个概念火了,相应的股票就都大涨. 如果能及时获取股票涨跌信息,那就能在刚开始火起来的时 ...

随机推荐

  1. IT面试技巧(2)

    21.最能概括你自己的三个词是什么? 回答提示:我经常用的三个词是:适应能力强,有责任心和做事有始终,结合具体例子向主考官解释, 22.你的业余爱好是什么? 回答提示:找一些富于团体合作精神的,这里有 ...

  2. pytorch中onehot编码转为普通label标签

    label转onehot的很多,但是onehot转label的有点难找,所以就只能自己实现以下,用的topk函数,不知道有没有更好的实现 one_hot = torch.tensor([[0,0,1] ...

  3. netbean out of memory java heap space

    When run test file in netbean. all dependency and resource are right, but it raise up java.lang.OutO ...

  4. C语言中的关键字初识

    C89标准定义的32个关键字 关键字 含义 void 声明函数无返回值或者无参数,声明空类型指针 char 声明字符型变量 short 声明短整型变量 int 声明整型变量 long 声明长整型变量 ...

  5. 【转】CentOS 7.3 从下载到安装

    CentOS 7.3 从下载到安装  https://blog.csdn.net/sxy2475/article/details/75194142 [百度知道]图解CentOS 7.3安装步骤  ht ...

  6. 分支结构if 语句举例

  7. MYSQL全文索引—CONTAINS语法

    我们通常在 WHERE 子句中使用 CONTAINS ,就象这样:SELECT * FROM table_name WHERE CONTAINS(fullText_column,'search con ...

  8. Python随笔记录之一

    import os import random from copy import deepcopy ''' 读取特定目录下所有的文件夹, 和文件名 ''' def eachDir(path): for ...

  9. tomcat如何正确的开启远程调试功能(转)

    转自:http://blog.csdn.net/mhmyqn/article/details/49209541 版权声明:本文为博主原创文章,未经博主允许不得转载. 在日常开发中,有时需要对远程服务器 ...

  10. 力扣——single number 2(只出现一次的数字 2) python实现

    题目描述: 中文: 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? ...