首先是对知识点归纳

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. linux缺頁異常處理--內核空間[v3.10]

    缺頁異常被觸發通常有兩種情況—— 1.程序設計的不當導致訪問了非法的地址 2.訪問的地址是合法的,但是該地址還未分配物理頁框 下面解釋一下第二種情況,這是虛擬內存管理的一個特性.盡管每個進程獨立擁有3 ...

  2. Dijkstra的优先队列

    模板 #include<iostream> #include<cstring> #include<algorithm> #include<cmath> ...

  3. Java接口自动化测试实战笔记

    综述 代码管理工具Git 测试框架 TestNG 测试报告 Mock 接口框架 HTTP 协议接口 测试框架 HttpClient SprintBoot 自动化测试开发 数据持久层框架 MyBatis ...

  4. Sublime Text3怎样在Deepin中配置CTags插件

    首先是要安装好Package Control,然后装插件CTags,这个时候在文件中右键已经能够出现Navigate to Definition菜单项了.然而,如果没有装CTags这个软件还是没用,所 ...

  5. 浏览器中的JavaScript事件循环机制

    浏览器的事件循环机制是HTML中定义的规范. JavaScript有一个主线程和调用栈,所有的任务都会被放到调用栈等待主线程执行. JS调用栈 是一种先进后出的数据结构.当函数被调用时,会被添加到栈中 ...

  6. mysql中关于--login-path使用

    在控制台登陆数据库,快捷登录 在控制台连接数据库,需要每次输入账号密码,感觉很麻烦,偶然发现可以通过login-path保存信息,实现快捷登录,这里记录下. 保存账号信息 mysql_config_e ...

  7. 2018-8-10-win10-uwp-httpClient-登陆CSDN

    title author date CreateTime categories win10 uwp httpClient 登陆CSDN lindexi 2018-08-10 19:16:53 +080 ...

  8. 基于Kubernetes 的Cloud Native 实战 培训课程安排

    课程安排: 基于Kubernetes 的Cloud Native 实战 课程介绍: 云计算.虚拟化.容器微服务PaaS 技术已经广泛应用于新兴互联网企业(如电商平台.搜索引擎.社交平台网站.位置服务平 ...

  9. BeanUtils.copyProperties()拷贝属性时,忽略空值

    把source的属性值复制给target的相同属性上,注意:双方需要复制的属性要有get.set方法 BeanUtils.copyProperties(source, target, PublicUt ...

  10. leetcode-165周赛-1276-不浪费原料的汉堡制作方案

    题目描述: 自己的提交: class Solution: def numOfBurgers(self, tomatoSlices: int, cheeseSlices: int) -> List ...