简单介绍一下:

老王是个新人,心血来潮想用java试试写爬虫,完全零基础,搜了很多教程,往往因为作者水平太高,不能一下子理解大佬代码中的深意,并且有些看似很简单的东西,对于我这种菜鸟来说,其实是很难解决的错误或者是异常。故,在稍有心得后,写下此篇。从最基础开始。一步一步,从小菜鸟,成为稍微大一点的菜鸟,给初学者带来一点启示。

如果只需要全部的代码,请直接拉至最后

如果转载,请注明出处:https://blog.csdn.net/qq_37893828/article/details/88133686 ——会飞的王浩然

如有疏漏之处,欢迎留言指出

往期列表:更多详细解释请从第一弹翻阅

  • java爬虫入门第一弹——从百度首页开始(欢迎浏览)
  • java爬虫入门第二弹——通过URL下载图片(以下载百度logo为例)(欢迎浏览)
  • java爬虫入门第三弹——正则表达式简单应用(抓取豆瓣读书信息并以文本文件输出)(欢迎浏览)

这一节我们的目标

根据你从网页上获取到的图片URL,下载图片

从最基础开始,我首先假设你什么都不会,只会一点点的C语言和java编程



  • 第一步: 创建java工程,并且在main函数中用string字符串存入你即将要下载的URL,以及图片存储的路径,并创建URL和文件对象
 public class Main {public static void main(String[] args) throws IOException {// TODO Auto-generated method stub//图片URLString imgUrlString = "https://http://www.baidu.com/img/bd_logo1.png";//存储路径String pathString = "D:\\logo.png";// 构造URL和文件对象URL url = new URL(imgUrlString);File file = new File(pathString);}}
  • 图片存放的路径可以是你已经建立的任意文件夹,然后需要你在我的电脑中找到那个文件夹,然后如下图所示复制文件夹路径,并且在路径后面加上你为这张图片取得名字,然后以“.jpg”或者“.png”形式结尾
  • 在第一弹中已经解释过什么是URL,以及“网络页面是一种网络资源”,而我们要下载的网络上的图片同样也是一种网络资源,我们需要通过URL获取网络上的各种资源
  • 获取图片URL的两种方式之第一种 如下图所示:在HTML网页中,每一个大于号“<”和小于号“>”及中间的内容称之为标签,我们想要获取图片的URL只需要找到名为“<img>”的标签即可找到图片的URL。
  • 下面这张图是在第一弹中下载到的百度首页,在第五行有这样一个标签:**<img hidefocus=true src=//www.baidu.com/img/bd_logo1.png width=270 height=129>**这个标签里面的"//www.baidu.com/img/bd_logo1.png"就是百度logo图片在百度网站上的地址,在我们定义的时候要注意在前面加上表示“http:”的协议。

  • 获取图片URL的两种方式之第二种 在随便一个浏览器中打开百度首页"www.baidu.com";右击网页空白地方,单击查看网页源代码,你看到的应该是如下图1这样子的一个界面,向下使劲翻,我们能找到类似于图二这样子的"<img>"标签,src后面的URL就是我们要找的图片的URL。



  • 第二步: 创建数据流
    代码按照顺序粘贴在main函数中即可
 // 连接到URLHttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();// 创建数据流// 获取数据,并以字节的形式放在缓冲区输入流InputStream inputStream = httpURLConnection.getInputStream();// 创建字节输出流ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();// 创建文件输出流FileOutputStream fileOutputStream = new FileOutputStream(file);
  • 关于字节输入流,我们要理解的是:所有的电脑上的文件最终都是以二进制byte数据存储在电脑中的,而且"FileOutputStream"只接受byte类型的数据,因此我们需要一个字节输出流"ByteArrayOutputStream"来完成从"InputStream"到"FIleOutputStream"的转换


  • **第三步:**将字节流转换为byte字节流再转换为文件流并且输出为图片
    代码按照顺序粘贴在main函数中即可
 // 将字节流转换为byte流byte[] byteArray = new byte[1024];int length;// 从输入流中读取数据并按字节放在byte数组中,完成输入流到byte数组的转换while ((length = inputStream.read(byteArray)) != -1) {// 完成从byte数组到字节输出流的转换byteArrayOutputStream.write(byteArray,0,length);}// 通过传入的文件路径进行写文件的操作FileOutputStream fileOutputStream = new FileOutputStream(file);// 将字节输出流数据写入文件输出流fileOutputStream.write(byteArrayOutputStream.toByteArray());
  • "while ((length = inputStream.read(byteArray)) != -1)"中的"while (inputStream.read(byteArray)"意思并不是从“byteArray”中读取数据,而是 "从(来源) 输入流(inputStream)中读取数据的下一个字节 到 (byteArray) 中去" ,运行一次只读取一个字节,以“-1”为结束标志。


全部代码

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;import javax.imageio.stream.FileImageOutputStream;public class Main {public static void main(String[] args) throws IOException {// TODO Auto-generated method stub//图片URLString imgUrlString = "http://www.baidu.com/img/bd_logo1.png";//存储路径String pathString = "D:\\logo.png";// 构造URL和文件对象URL url = new URL(imgUrlString);File file = new File(pathString);// 连接到URLHttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();// 创建数据流// 获取数据,并以字节的形式放在缓冲区输入流InputStream inputStream = httpURLConnection.getInputStream();// 创建字节输出流ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();// 将字节流转换为byte流byte[] byteArray = new byte[1024];int length;// 从输入流中读取数据并按字节放在byte数组中,完成输入流到byte数组的转换while ((length = inputStream.read(byteArray)) != -1) {// 完成从byte数组到字节输出流的转换byteArrayOutputStream.write(byteArray,0,length);}// 通过传入的文件路径进行写文件的操作FileOutputStream fileOutputStream = new FileOutputStream(file);// 将字节输出流数据写入文件输出流fileOutputStream.write(byteArrayOutputStream.toByteArray());}}

java爬虫入门第二弹——通过URL下载图片(以下载百度logo为例)相关推荐

  1. Java爬虫入门篇---Jsoup工具

    Java爬虫入门篇---Jsoup工具 前言 准备工作 获取文本数据 获取页面中所有的图片 前言 pythoy的scrapy框架是大名鼎鼎,Jsoup则为Java框架的爬虫 准备工作 1.下载jsou ...

  2. Linux入门第二弹!Xshell、Xftp、tomcat的Linux版本、双X的教学资源!

    Linux入门第二弹!Xshell.Xftp.tomcat的Linux版本.双X的教学资源! 我们可以通过Xshell和Xftp进行简单的,远程连接Linux系统.并且可以使用图形化界面快捷的进行文件 ...

  3. HFSS-API入门第二弹:基本形状和操作

    学个Antenna是以天线仿真和调试为主,理论原理为辅的干货天线技术专栏,包括天线入门知识以及各类天线的原理简介.仿真软件建模.设计.调试过程及思路.如有想看到的内容或技术问题,可以在文尾写下留言. ...

  4. java下载图片到本地,例如从网上下载图片,下载淘宝图片,下载百度图片等

    java下载图片到本地,例如从网上下载图片,下载淘宝图片,下载百度图片. 直接上代码如下: public static void download(String url,String saveFile ...

  5. java爬虫系列第二讲-爬取最新动作电影《海王》迅雷下载地址

    为什么80%的码农都做不了架构师?>>>    1. 目标 使用webmagic爬取动作电影列表信息 爬取电影**<海王>**详细信息[电影名称.电影迅雷下载地址列表] ...

  6. java爬虫入门_Java 网络爬虫新手入门详解

    这是 Java 网络爬虫系列文章的第一篇,如果你还不知道 Java 网络爬虫系列文章,请参看Java 网络爬虫基础知识入门解析.第一篇是关于 Java 网络爬虫入门内容,在该篇中我们以采集虎扑列表新闻 ...

  7. java学习资源第二弹,持续更新方便你我

    学习资源我们一直在更新中 Java JDK 7学习笔记: 链接:https://pan.baidu.com/s/1ZweY5UpKr87H9MaxShfx-g 密码:1xct Java Web入门经典 ...

  8. Python爬虫入门【7】: 蜂鸟网图片爬取之二

    蜂鸟网图片–简介 今天玩点新鲜的,使用一个新库 aiohttp ,利用它提高咱爬虫的爬取速度. 安装模块常规套路 pip install aiohttp 运行之后等待,安装完毕,想要深造,那么官方文档 ...

  9. 培训第二弹:全国大学生智能汽车竞赛百度竞速组预告

    §01 竞赛培训 3月12日本周六晚7点,百度飞桨B站直播间,第十七届全国大学生智能汽车竞赛完全模型组竞速赛第二次线上培训正式开讲! ▲ 图1 卓老师前来百度科技园"检查作业" ▲ ...

  10. python下载图片-Python下载URL图片

    所谓下载URL图片就是指通过网络图片的URL去用脚本自动获取和下载图片到本地. 这里介绍两种方法,一种需要用到第三方库requests,一种直接使用Python自带的库urllib. 首先找到你要下载 ...

最新文章

  1. hadoop 安全模式
  2. 网络推广——符合网站现状的优化方案才是最适合进行网络推广的方案
  3. EJB3.0开发环境的搭建
  4. python软件如何安装方法_【新手必看】Python软件下载及安装教程
  5. magento 删除所有用户订单 delete order customer
  6. 官宣,Shane Miller 当选 Rust 基金会首任主席
  7. 机器学习第二回总结——多变量线性回归
  8. 奇迹mu开服教程:服务端的架设及开服注意事项
  9. unity 粒子特效优化
  10. 助力公共事业服务,RPA大显身手
  11. 关于能力素质模型建模
  12. linux网络驱动 poll,网络 – Linux网络驱动程序中的并发:probe()VS ndo_open(),ndo_start_xmit()VS NAPI poll()...
  13. Flume 数据采集
  14. OSPF的DR和BDR【eNSP实现】
  15. 人工神经网络与深度神经网络
  16. 微信小程序之顶部导航栏(选项卡)实例 —— 微信小程序实战系列(1)
  17. bpm,bpm千万里我找的就是你!!
  18. 个人信息的泄露到底严重到了什么地步?
  19. select、poll、epoll的文件描述符上限问题
  20. ASP读取淘宝CVS数据包。

热门文章

  1. cas27647-84-3四羧基苯基卟啉锌;四羧基苯基锌卟啉TCPP-Zn(2+)/分子量:850.116160000001
  2. 【音频处理】Melodyne 简介 ( Melodyne 音频处理注意事项 | 在音乐宿主软件中加载 Melodyne 插件 )
  3. 金融学核心期刊有哪些?
  4. 这是我看过把Spring Cloud核心组件讲的最明白的一个故事了
  5. 数据库——MySQL——完整性约束
  6. Galaxy Note20 Ultra 开发者选项
  7. 电机控制中空间矢量脉宽调制SVPWM与simulink仿真详解
  8. 指标之王macd的计算公式和使用方法
  9. 如何免费且快速的搭建个人网站
  10. 基于AE的GIS二次开发作业文档