找回密码
  注册[Register]
查看: 792|回复: 7

爬虫-抓取网站所有图片,并下载到本地

[复制链接]
发表于 2020-9-18 17:31 来自手机 | 显示全部楼层 |阅读模式
禁止求评分、诱导评分、互刷评分、互刷悬赏值,违规者封号处理。
禁止发布推广、邀请码、邀请链接、二维码或者有利益相关的任何推广行为。
所有非原创软件请发布在【精品软件区】,发帖必须按照本版块版规格式发帖。

仅供学习使用~

环境,需要Java环境
需要Jsoup依赖

主代码:
  1. package com.cn.st.site.ink.jav;

  2. import com.cn.st.util.DownloadImage;
  3. import org.jsoup.Jsoup;
  4. import org.jsoup.nodes.Document;
  5. import org.jsoup.nodes.Element;
  6. import org.jsoup.select.Elements;

  7. import java.io.IOException;
  8. import java.util.ArrayList;
  9. import java.util.List;

  10. /**
  11. * @Author: XXX-HR
  12. * @Date: 2020/8/21 17:58
  13. * @Desc: 目标地址:https://www.jav.ink/
  14. * @tips: 这个网站是个小黄站~~!
  15. */
  16. public class Spider {

  17.     /**
  18.      * 总页数
  19.      */
  20.     final static Integer TOTAL = 1258;

  21.     final static String URL = "https://www.jav.ink/page/";

  22.     final static String savePath = "D:/image/";


  23.     public static void main(String[] args) throws IOException {
  24.         for (int i = 1; i < TOTAL; i++) {
  25.             System.out.println("准备下载第:" + i+"页");
  26.             getPage(URL+"/");
  27.             System.out.println("第:" + i+"页抓取完毕、");
  28.         }

  29.     }

  30.     private static void getPage(String pageAddress) throws IOException {
  31.         //解析单页
  32.         Document document = Jsoup.connect(URL)
  33.                 .timeout(2001 * 1000)
  34.                 .ignoreContentType(true)
  35.                 .ignoreHttpErrors(true)
  36.                 .cookie("cookie","__cfduid=d2c7c3594bb4f5b3cd5517f9c6749c3e51598003707; HstCfa4208213=1598003714265; HstCmu4208213=1598003714265; HstCnv4208213=2; HstCns4208213=2; HstCla4208213=1598008749837; HstPn4208213=9; HstPt4208213=10")
  37. //                .cookie()
  38.                 .header("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36")
  39.                 .get();
  40.         System.out.println("抓取成功...");
  41.         Elements uls = document.select("#infinite-articles");
  42.         List<Image> imageList = new ArrayList<>();

  43.         for (Element li : uls.select("li")) {
  44.             Elements a_img = li.select("a img");
  45.             String img_url = a_img.attr("src");
  46.             String otherImg = a_img.attr("srcset");
  47.             String altName = a_img.attr("alt");
  48.             Image image = Image.getImage(altName, img_url, otherImg.trim());
  49.             imageList.add(image);
  50.             down10Images(imageList);
  51.         }
  52.         System.out.println("下载了一页....");
  53.     }

  54.     public static void down10Images(List<Image> imageList) {
  55.         if (imageList.size() > 10) {
  56.             System.out.println("开始下载文件。。");
  57.             downImages(imageList);
  58.         } else {
  59.             return;
  60.         }
  61.         System.out.println("下载了10个...");
  62.     }

  63.     private static void downImages(List<Image> imageList) {
  64.         for (Image i : imageList) {
  65.             try {
  66.                 DownloadImage.download(i.getUrl(), i.getName()+".jpg", savePath + i.getName() + "/");
  67.                 if (i.getOthers().size() > 0) {
  68.                     for (String otherUrls : i.getOthers()) {
  69.                         DownloadImage.download(otherUrls, i.getName()+".jpg", savePath + i.getName() + "/");
  70.                     }
  71.                 }
  72.             } catch (Exception e) {
  73.                 continue;
  74.             }
  75.         }
  76.         imageList.clear();
  77.     }

  78. }
复制代码


  1. package com.cn.st.util;

  2. import java.io.File;
  3. import java.io.FileOutputStream;
  4. import java.io.InputStream;
  5. import java.io.OutputStream;
  6. import java.net.HttpURLConnection;
  7. import java.net.URL;
  8. import java.util.concurrent.TimeUnit;


  9. /**
  10. * 图片下载工具类、
  11. */
  12. public class DownloadImage {

  13.     /**
  14.      * 下载网络文件到本地、
  15.      *
  16.      * [url=home.php?mod=space&uid=952169]@Param[/url] urlString 网络文件全路径
  17.      * @param filename  文件再本地的名字
  18.      * @param savePath  本地文件路径
  19.      * @throws Exception
  20.      */
  21.     public static void download(String urlString, String filename, String savePath) throws Exception {
  22.         TimeUnit.SECONDS.sleep(2);
  23.         // 构造URL  
  24.         URL url = new URL(urlString);
  25.         // 打开连接  
  26.         HttpURLConnection con = (HttpURLConnection) url.openConnection();
  27.         //设置请求超时为50s
  28.         con.setConnectTimeout(500 * 1000);
  29.         con.setRequestMethod("GET");
  30.         //防止屏蔽程序抓取而返回403错误
  31.         con.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36");
  32.         con.setDoOutput(true);
  33.         con.setDoInput(true);
  34.         // 输入流  
  35.         InputStream is = con.getInputStream();

  36.         // 1K的数据缓冲  
  37.         byte[] bs = new byte[1024];
  38.         // 读取到的数据长度  
  39.         int len;
  40.         // 输出的文件流  
  41.         File sf = new File(savePath);
  42.         if (!sf.exists()) {
  43.             sf.mkdirs();
  44.         }
  45.         OutputStream os = new FileOutputStream(sf.getPath() + "\" + System.currentTimeMillis() + "---" + filename);
  46.         // 开始读取  
  47.         while ((len = is.read(bs)) != -1) {
  48.             os.write(bs, 0, len);
  49.         }
  50.         os.close();
  51.         is.close();
  52.     }
  53. }
复制代码


如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2020-9-18 17:32 | 显示全部楼层
谢谢大牛
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-9-18 17:39 | 显示全部楼层
好的,非常感谢
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-9-18 18:20 | 显示全部楼层
谢谢分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-9-18 18:21 | 显示全部楼层
谢谢大佬
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-9-18 18:29 | 显示全部楼层
感谢楼主分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-9-18 19:49 | 显示全部楼层
6666
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-9-18 21:09 | 显示全部楼层
6666666666
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

RSS订阅|手机版|小黑屋|广告投放|大牛论坛

GMT+8, 2024-5-29 07:37 , Processed in 0.032332 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表