博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
抓取页面图片元素并保存到本机电脑
阅读量:6202 次
发布时间:2019-06-21

本文共 4777 字,大约阅读时间需要 15 分钟。

在这里主要通过流分析,通过java模拟访问页面获取到页面的html元素,并通过jsoup来分析获取到的html元素,

然后通过流处理来将图片保存到本机

package getpicture;import java.io.BufferedReader;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.net.HttpURLConnection;import java.net.URL;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Scanner;import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import org.jsoup.nodes.Element;import org.jsoup.select.Elements; public class getPicture {        public static void main(String[] args) {        new Thread(new Spider()).start();    }} // 抓网页, 并分析出图片地址class Spider implements Runnable {    private String firstUrl = "http://jandan.net/ooxx/page-"; //1111#comments    private String connUrl = "#comments";    private int beginIndex = 1115;    private String preHtml;    //private String testPath="http://www.mop.com/#";    private String mSavePath;         public Spider() {};         @Override    public void run() {        try {            URL newURL = new URL(firstUrl + beginIndex + connUrl);            //URL newURL = new URL(testPath);            HttpURLConnection conn = (HttpURLConnection) newURL.openConnection();            conn.setRequestProperty("Connection","keep-alive");            conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36");            conn.setDoInput(true);            conn.setDoOutput(true);            OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream(),"utf-8");            out.flush();            out.close();             InputStream inputStream = conn.getInputStream();            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "utf-8"));            String line;            //读取页面html元素            while ((line = reader.readLine()) != null) {                 preHtml+=line;             }            System.out.println(preHtml);            //当页面访问成功时,解析页面元素,获取页面图片元素            if(conn.getResponseCode()==200){                Document doc=Jsoup.parse(preHtml);                Elements elements = doc.select(".row img");                for(Element e : elements) {                    String imgSrc = e.attr("src");                    new Thread(new DownloadImage(imgSrc)).start();                }            }        }catch(Exception e) {            e.printStackTrace();        }    }} class DownloadImage implements Runnable {    private String imageSrc;    private String imageName;    public DownloadImage(String imageSrc) {        this.imageSrc = imageSrc;    }        @Override    public void run() {        String[] splits = imageSrc.split("/");        imageName = splits[splits.length - 1];        Date date=new Date();        SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMdd");               String random=sdf.format(date);        File file = new File("E:\\picture\\"+sdf+"\\"+imageName);         // 如果路径不存在,则创建          if (!file.getParentFile().exists()) {              file.getParentFile().mkdirs();          }         //判断文件是否存在,不存在就创建文件        if(!file.exists()&& !file .isDirectory()) {            try {                file.createNewFile();            } catch (IOException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        }              System.out.println("开始下载图片:" + imageName);                try {            URL newURL = new URL("http:"+imageSrc);            HttpURLConnection conn = (HttpURLConnection) newURL.openConnection();            conn.setRequestProperty("Connection","keep-alive");            conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36");            conn.setDoInput(true);            conn.setDoOutput(true);            //通过输入流获取图片数据            InputStream inputStream = conn.getInputStream();            //BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));            byte[] data=new byte[1024];            //创建输出流               FileOutputStream fos = new FileOutputStream(file);                     int len = 0;                         //使用一个输入流从buffer里把数据读取出来              while( (len=inputStream.read(data)) != -1 ){                  //用输出流往buffer里写入数据,中间参数代表从哪个位置开始读,len代表读取的长度                  fos.write(data, 0, len);              }             fos.flush();            fos.close();            System.out.println("下载完成:" + imageName);        }catch(Exception e) {            System.err.println(" 这个图片下载不了哇!\n删除妹子" + imageName);            return;        }    }}
View Code

 

转载于:https://www.cnblogs.com/feitianshaoxai/p/6595381.html

你可能感兴趣的文章
PHP中Date获取时间不正确怎么办
查看>>
SFHA for windows下SQL启动问题
查看>>
编译安装LAMP-------动静分离
查看>>
virtualbox 安装debian后安装增强功能
查看>>
MySQL优化方向&思路
查看>>
大一统的Netfilter-一种Linux防火墙优化方法
查看>>
Linux用户,组及权限管理
查看>>
Cisco asa5510 防火墙限制局域网内每个IP的速度
查看>>
HibernateException: No Session found for current thread
查看>>
OpenStack云平台的网络模式及其工作机制
查看>>
突破LVS瓶颈,LVS Cluster部署(OSPF + LVS)
查看>>
Java技术驿站
查看>>
为什么SQL Server数据文件和日志文件最后更新日期不准?
查看>>
dell服务器虚拟化平台应用【我身边的戴尔企业级解决方案】
查看>>
Freemarker 的 Eclipse 插件 安装
查看>>
84天平美女征婚【非诚勿扰】
查看>>
深入浅出之-route命令实战使用指南
查看>>
安装OpenStack ValueError: Tables "migrate_version" have non utf8 co
查看>>
后台登陆框post注入实战
查看>>
python安装pip (windows64)
查看>>