首先是对知识点归纳

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

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

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

下面上代码:

网页源代码不粘贴了

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

  1. package 文件操作;
  2.  
  3. import java.io.ByteArrayOutputStream;
  4. import java.io.File;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8. import java.net.HttpURLConnection;
  9. import java.net.MalformedURLException;
  10. import java.net.URL;
  11.  
  12. public class Pic696 {
  13.  
  14. public static void main(String[] args) {
  15. for(int i =1;i<72;i++) {
  16. for (int j =1; j < 50; j++) {
  17.  
  18. if(i<10&&j<10) {
  19. String strUrl ="https://mmslt1.com/tp/girl/FEILIN/A-00"+i+"/0"+j+".jpg";
  20. // System.out.println(i+" "+j);
  21. System.out.println(strUrl);
  22. URL url;
  23. try {
  24. url = new URL(strUrl);
  25. try {
  26. Pig(url, i, j);
  27. } catch (IOException e) {
  28. System.out.println("404");
  29. }
  30. } catch (MalformedURLException e) {
  31.  
  32. }
  33.  
  34. }
  35. if(i<10&&j>=10) {
  36. String strUrl ="https://mmslt1.com/tp/girl/FEILIN/A-00"+i+"/"+j+".jpg";
  37. // System.out.println(i+" "+j);
  38. System.out.println(strUrl);
  39. URL url;
  40. try {
  41. url = new URL(strUrl);
  42. try {
  43. Pig(url, i, j);
  44. } catch (IOException e) {
  45. System.out.println("404");
  46. }
  47. } catch (MalformedURLException e) {
  48. // TODO Auto-generated catch block
  49. e.printStackTrace();
  50. }
  51.  
  52. }
  53. if(i>=10&&j<10) {
  54. String strUrl ="https://mmslt1.com/tp/girl/FEILIN/A-0"+i+"/0"+j+".jpg";
  55. // System.out.println(i+" "+j);
  56. System.out.println(strUrl);
  57. URL url;
  58. try {
  59. url = new URL(strUrl);
  60. try {
  61. Pig(url, i, j);
  62. } catch (IOException e) {
  63. System.out.println("404");
  64. }
  65. } catch (MalformedURLException e) {
  66. // TODO Auto-generated catch block
  67. e.printStackTrace();
  68. }
  69.  
  70. }
  71. if(i>=10&&j>=10) {
  72. String strUrl ="https://mmslt1.com/tp/girl/FEILIN/A-0"+i+"/"+j+".jpg";
  73. // System.out.println(i+" "+j);
  74. System.out.println(strUrl);
  75. URL url;
  76. try {
  77. url = new URL(strUrl);
  78. try {
  79. Pig(url, i, j);
  80. } catch (IOException e) {
  81. System.out.println("404");
  82. }
  83. } catch (MalformedURLException e) {
  84. // TODO Auto-generated catch block
  85. e.printStackTrace();
  86. }
  87.  
  88. }
  89. }
  90. }
  91.  
  92. }
  93.  
  94. static void Pig(URL urlStr,int i,int j) throws IOException {
  95. //构造连接
  96. HttpURLConnection conn = (HttpURLConnection)urlStr.openConnection();
  97. conn.setRequestMethod("GET");
  98. //这个网站要模拟浏览器才行
  99. conn.setRequestProperty("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0");
  100. //打开连接
  101. conn.connect();
  102.  
  103. //打开这个网站的输入流
  104. InputStream inStream = conn.getInputStream();
  105. //用这个做中转站 ,把图片数据都放在了这里,再调用toByteArray()即可获得数据的byte数组
  106. ByteArrayOutputStream outStream = new ByteArrayOutputStream();
  107. //用这个是很好的,不用一次就把图片读到了文件中
  108. //要是需要把图片用作其他用途呢?所以直接把图片的数据弄成一个变量,十分有用
  109. //相当于操作这个变量就能操作图片了
  110.  
  111. byte [] buf = new byte[1024];
  112. //为什么是1024?
  113. //1024Byte=1KB,分配1KB的缓存
  114.  
  115. int len = 0;
  116.  
  117. //读取图片数据
  118. while((len=inStream.read(buf))!=-1){
  119. // System.out.println(len);
  120. outStream.write(buf,0,len);
  121. }
  122. inStream.close();
  123. outStream.close();
  124.  
  125. //把图片数据填入文件中
  126. // File files = new File("E://Pic696");
  127. // files.mkdirs();
  128. File file = new File("E://Pic696/Pic"+i+"_"+j+".jpg");
  129.  
  130. FileOutputStream op = new FileOutputStream(file);
  131.  
  132. op.write(outStream.toByteArray());
  133.  
  134. op.close();
  135. }
  136. }

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

  1. package 文件操作;
  2.  
  3. import java.awt.Rectangle;
  4. import java.awt.image.BufferedImage;
  5. import java.io.BufferedReader;
  6. import java.io.File;
  7. import java.io.FileInputStream;
  8. import java.io.IOException;
  9. import java.io.InputStream;
  10. import java.io.InputStreamReader;
  11. import java.net.MalformedURLException;
  12. import java.net.URL;
  13. import java.util.Iterator;
  14.  
  15. import javax.imageio.ImageIO;
  16. import javax.imageio.ImageReadParam;
  17. import javax.imageio.ImageReader;
  18. import javax.imageio.stream.ImageInputStream;
  19. import javax.swing.ImageIcon;
  20.  
  21. public class cityScore {
  22.  
  23. public static void main(String[] args) {
  24. for (int i = 1; i < 10; i++) {
  25. for (int j = 1; j < 40; j++) {
  26. String OldPic ="E:/Pic696/Pic"+i+"_"+j+".jpg";
  27. String NewPic ="E:/Pic696/new/Pic"+i+"_"+j+".jpg";
  28. ImageIcon imageIcon = new ImageIcon(OldPic);
  29. int iconWidth = imageIcon.getIconWidth();
  30. int iconHeight =imageIcon.getIconHeight();
  31. cutImage(OldPic, NewPic,iconWidth, iconHeight-70);
  32. }
  33. }
  34.  
  35. }
  36.  
  37. /**
  38. * 图片裁剪
  39. * @param srcImageFile 图片裁剪地址
  40. * @param result 图片输出文件夹
  41. * @param destWidth 图片裁剪宽度
  42. * @param destHeight 图片裁剪高度
  43. */
  44. public final static void cutImage(String srcImageFile, String result,
  45. int destWidth, int destHeight) {
  46. try {
  47. Iterator iterator = ImageIO.getImageReadersByFormatName("JPEG");/*PNG,BMP*/
  48. ImageReader reader = (ImageReader)iterator.next();/*获取图片尺寸*/
  49. InputStream inputStream = new FileInputStream(srcImageFile);
  50. ImageInputStream iis = ImageIO.createImageInputStream(inputStream);
  51. reader.setInput(iis, true);
  52. ImageReadParam param = reader.getDefaultReadParam();
  53. Rectangle rectangle = new Rectangle(0,0, destWidth, destHeight);/*指定截取范围*/
  54. param.setSourceRegion(rectangle);
  55. BufferedImage bi = reader.read(0,param);
  56. ImageIO.write(bi, "JPEG", new File(result));
  57. } catch (Exception e) {
  58. System.out.println(e);
  59. }
  60. }
  61. }

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. HDU 5125 magic balls(线段树+DP)

    magic balls Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  2. java并发编程之美-阅读记录2

    2.1什么是多线程并发编程 并发:是指在同一时间段内,多个任务同时在执行,并且执行没有结束(同一时间段又包括多个单位时间,也就是说一个cpu执行多个任务) 并行:是指在单位时间内多个任务在同时执行(也 ...

  3. Echart报 [MODULE_MISS]"echarts/config的错

    echarts插件的引入有两种方式 项目用到Echarts插件,时下比较流行的是模块化包引入,但是很悲催的是楼主用的是标签式引入,所以从官网copy来的代码总是报一个 [MODULE_MISS]&qu ...

  4. gulp构建前端,压缩css,js文件,实现浏览器自动刷新

    一.安装node nodejs下载地址:https://nodejs.org/ nodejs自带npm模块管理器,安装完成之后打开dos命令窗口输入 node -v就能查看nodejs是否安装成成功 ...

  5. 关于C++中的非静态类成员函数指针

    昨天发现了一个问题,就是使用对类中的非静态成员函数使用std::bind时,不能像普通函数一样直接传递函数名,而是必须显式地调用&(取地址),于是引申出我们今天的问题:非静态类成员函数指针和普 ...

  6. Es学习第二课, ES安装和客户端使用

    Elasticsearch安装依赖于jdk,所以大家先保证自己电脑安装好Java环境(JDK7或更高版本),并配置好环境变量:这块的配置我就不细讲了,不管是Linux还是Windows,这块的安装和配 ...

  7. Myeclipse 崩溃闪退 Java was started but returned exit code =-1

    出现如上图所述情况的原因可能是因为虚拟机jdk和myEclipse配置文件中的vm地址发生冲突报出的错误 第一种解决办法:只需要将你jdk文件下的bin目录下的javaw.exe文件的全部路径复制到M ...

  8. Docker 镜像添加模块

    Docker 镜像添加模块   1. 使用root用户进入一个新容器,不要用 --rm .否则退出容器的时候,容器没有了 docker run --user 0 -it --name superman ...

  9. php abs()函数 语法

    php abs()函数 语法 abs()函数怎么用? abs()函数的作用是返回一个数的绝对值.语法是abs(number),如果参数 number 是 float,则返回的类型也是 float,否则 ...

  10. Mavlink_main.cpp源码学习

    int mavlink_main(int argc, char *argv[]) { if (argc < 2) { usage();                               ...