java爬取猫咪上的图片
首先是对知识点归纳
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爬取猫咪上的图片的更多相关文章
- python批量爬取猫咪图片
不多说直接上代码 首先需要安装需要的库,安装命令如下 pip install BeautifulSoup pip install requests pip install urllib pip ins ...
- 【Python3 爬虫】14_爬取淘宝上的手机图片
现在我们想要使用爬虫爬取淘宝上的手机图片,那么该如何爬取呢?该做些什么准备工作呢? 首先,我们需要分析网页,先看看网页有哪些规律 打开淘宝网站http://www.taobao.com/ 我们可以看到 ...
- Java爬取B站弹幕 —— Python云图Wordcloud生成弹幕词云
一 . Java爬取B站弹幕 弹幕的存储位置 如何通过B站视频AV号找到弹幕对应的xml文件号 首先爬取视频网页,将对应视频网页源码获得 就可以找到该视频的av号aid=8678034 还有弹幕序号, ...
- Java爬取网络博客文章
前言 近期本人在某云上购买了个人域名,本想着以后购买与服务器搭建自己的个人网站,由于需要筹备的太多,暂时先搁置了,想着先借用GitHub Pages搭建一个静态的站,搭建的过程其实也曲折,主要是域名地 ...
- Java爬取校内论坛新帖
Java爬取校内论坛新帖 为了保持消息灵通,博主没事会上上校内论坛看看新帖,作为爬虫爱好者,博主萌生了写个爬虫自动下载的想法. 嗯,这次就选Java. 第三方库准备 Jsoup Jsoup是一款比较好 ...
- java爬取网页内容 简单例子(2)——附jsoup的select用法详解
[背景] 在上一篇博文java爬取网页内容 简单例子(1)——使用正则表达式 里面,介绍了如何使用正则表达式去解析网页的内容,虽然该正则表达式比较通用,但繁琐,代码量多,现实中想要想出一条简单的正则表 ...
- java爬取网页内容 简单例子(1)——使用正则表达式
[本文介绍] 爬取别人网页上的内容,听上似乎很有趣的样子,只要几步,就可以获取到力所不能及的东西,例如呢?例如天气预报,总不能自己拿着仪器去测吧!当然,要获取天气预报还是用webService好.这里 ...
- java爬取并下载酷狗TOP500歌曲
是这样的,之前买车送的垃圾记录仪不能用了,这两天狠心买了好点的记录仪,带导航.音乐.蓝牙.4G等功能,寻思,既然有这些功能就利用起来,用4G听歌有点奢侈,就准备去酷狗下点歌听,居然都是需要办会员才能下 ...
- Java爬取同花顺股票数据(附源码)
最近有小伙伴问我能不能抓取同花顺的数据,最近股票行情还不错,想把数据抓下来自己分析分析.我大A股,大家都知道的,一个概念火了,相应的股票就都大涨. 如果能及时获取股票涨跌信息,那就能在刚开始火起来的时 ...
随机推荐
- HDU 5125 magic balls(线段树+DP)
magic balls Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- java并发编程之美-阅读记录2
2.1什么是多线程并发编程 并发:是指在同一时间段内,多个任务同时在执行,并且执行没有结束(同一时间段又包括多个单位时间,也就是说一个cpu执行多个任务) 并行:是指在单位时间内多个任务在同时执行(也 ...
- Echart报 [MODULE_MISS]"echarts/config的错
echarts插件的引入有两种方式 项目用到Echarts插件,时下比较流行的是模块化包引入,但是很悲催的是楼主用的是标签式引入,所以从官网copy来的代码总是报一个 [MODULE_MISS]&qu ...
- gulp构建前端,压缩css,js文件,实现浏览器自动刷新
一.安装node nodejs下载地址:https://nodejs.org/ nodejs自带npm模块管理器,安装完成之后打开dos命令窗口输入 node -v就能查看nodejs是否安装成成功 ...
- 关于C++中的非静态类成员函数指针
昨天发现了一个问题,就是使用对类中的非静态成员函数使用std::bind时,不能像普通函数一样直接传递函数名,而是必须显式地调用&(取地址),于是引申出我们今天的问题:非静态类成员函数指针和普 ...
- Es学习第二课, ES安装和客户端使用
Elasticsearch安装依赖于jdk,所以大家先保证自己电脑安装好Java环境(JDK7或更高版本),并配置好环境变量:这块的配置我就不细讲了,不管是Linux还是Windows,这块的安装和配 ...
- Myeclipse 崩溃闪退 Java was started but returned exit code =-1
出现如上图所述情况的原因可能是因为虚拟机jdk和myEclipse配置文件中的vm地址发生冲突报出的错误 第一种解决办法:只需要将你jdk文件下的bin目录下的javaw.exe文件的全部路径复制到M ...
- Docker 镜像添加模块
Docker 镜像添加模块 1. 使用root用户进入一个新容器,不要用 --rm .否则退出容器的时候,容器没有了 docker run --user 0 -it --name superman ...
- php abs()函数 语法
php abs()函数 语法 abs()函数怎么用? abs()函数的作用是返回一个数的绝对值.语法是abs(number),如果参数 number 是 float,则返回的类型也是 float,否则 ...
- Mavlink_main.cpp源码学习
int mavlink_main(int argc, char *argv[]) { if (argc < 2) { usage(); ...