文章目录

  • img_download
    • 1.0 看看效果吧
    • 2.0 了解一下 "图片下载器软件" 目录结构
    • 3.0 如何使用?
    • 4.0 源码剖析
    • 5.0 项目地址
    • 6.0 写在最后的话

前言: 大概一个月前帮一个朋友写一个爬虫,这个爬虫比较有意思,抓取新浪微博的图片(某个人物的微博)【站内深度抓取】,然后就花了点时间帮他写一个java爬虫,然后打包成为一个类似绿色版的软件给他,双击即可运行的那种。然后我不太敢把那个源码放出来,所以我就写了另外一个更加有意思的爬虫~ 你想要什么图片,都可以下载,想要多少张都可以设置【奸笑】,这个小程序是一个小于1M的文件夹,超级轻量~超级好用

img_download

1.0 看看效果吧


2.0 了解一下 “图片下载器软件” 目录结构

链接:https://pan.baidu.com/s/1_R0WYQDLMiokyNTpWEXNxw
提取码:8id5

你从百度云下载下来的应该是一个 img_download.rar 压缩包,然后解压出来即可使用,如下
你只需要双击运行 start.bat 即可下载图片 【默认下载 唐嫣 100张图片】

3.0 如何使用?

1.0 图片下载器是基于百度搜索引擎实现
2.0 图片下载器获取图片链接使用单线程,下载图片使用多线程,正常情况下,1分钟能下载下载大概3000+图片【亲测】
3.0 图片下载使用方法:3.1 从百度网盘上下载最新的绿色版3.2 解压出来后再 ./conf目录下修改对应的参数即可 如: keyword totalCount (这两个关键参数)3.3 接着双击start.bat文件即可开始下载图片

4.0 源码剖析

核心代码如下

import cn.shaines.util.*;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONPath;import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.concurrent.ThreadLocalRandom;
import java.util.concurrent.atomic.AtomicInteger;/*** @author houyu*/
public class BaiDuImgSpider2 {private static final LoggerFactory.Logger logger = LoggerFactory.getLogger(BaiDuImgSpider2.class);private ThreadPoolUtil threadPoolUtil;// private BloomFilter<CharSequence> bloomFilter;private List<String> list;private Conf conf;private AtomicInteger index = new AtomicInteger();public void init() {threadPoolUtil = ThreadPoolUtil.get();// bloomFilter =  BloomFilter.create(Funnels.stringFunnel(StandardCharsets.UTF_8), 1000, 0.0001);PropertiesUtil propertiesUtil = PropertiesUtil.builder(System.getProperty("user.dir") + "/conf/img.baidu.properties").build();Conf conf = new Conf();conf.setKeyword(propertiesUtil.getPropertyOrDefault("keyword", "唐嫣"));conf.setResultPath(propertiesUtil.getPropertyOrDefault("resultPath", System.getProperty("user.dir") + "/download/" + conf.getKeyword()));conf.setTotalCount(propertiesUtil.getPropertyOrDefault("totalCount", 1000));conf.setSleepTime(propertiesUtil.getPropertyOrDefault("sleepTime", 1000L));list = new ArrayList<>(conf.getTotalCount());//this.conf = conf;}public void run() throws Exception {// init -- start// 创建目录, 存在则不创建.// new File(resultPath).mkdirs();Files.createDirectories(Paths.get(this.conf.getResultPath()));// init --  end//String contextUrl = "https://image.baidu.com/";String baseUrl = "https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord=${keyword}&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=&hd=&latest=&copyright=&word=${keyword}&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&cg=star&pn=${startIndex}&rn=30&gsm=&1570893297936=";//HttpURLConnectionUtil.Session session = HttpURLConnectionUtil.buildSession();//for(int i = 0; i < this.conf.getTotalCount(); i += 10) {if(i % 100 == 0) {// 查找10页, 那就换一个cookiesession.build(contextUrl).execute().getBody();}// 随机睡眠0 ~ 指定的睡眠时间之内的时间Thread.sleep(ThreadLocalRandom.current().nextLong(this.conf.getSleepTime()));//String url = baseUrl.replace("${keyword}", this.conf.getKeyword()).replace("${startIndex}", String.valueOf(i));String bodyString = session.build(url).setIfEncodeUrl(true).execute().getBodyString();Object urlObject = JSONPath.eval(JSON.parseObject(bodyString), "$..data..hoverURL");if(urlObject instanceof List) {for(String imgUrl : (List<String>) urlObject) {// if(bloomFilter.mightContain(imgUrl)) {if(list.contains(imgUrl)) {continue;}saveToFile(session, this.conf.getResultPath(), imgUrl);// bloomFilter.put(imgUrl);list.add(imgUrl);}}}}private void saveToFile(HttpURLConnectionUtil.Session session, String resultPath, String imgUrl) {threadPoolUtil.submit(() -> {byte[] body = session.build(imgUrl).execute().getBody();String fileType = FileUtil.getVagueImgFileType(FileUtil.getFileType(imgUrl));fileType = fileType == null ? "png" : fileType;try {String format = "%0"+ String.valueOf(this.conf.getTotalCount()).length() +"d";String prefix = String.format(format, index.incrementAndGet());Files.write(Paths.get(resultPath + "/" + prefix + "_" + UUID.randomUUID().toString().replace("-", "") + "." + fileType), body);} catch(IOException e) {logger.warn("保存图片失败", e);}});}public static void main(String[] args) throws Exception {BaiDuImgSpider2 baiDuImgSpider = new BaiDuImgSpider2();baiDuImgSpider.init();baiDuImgSpider.run();}private class Conf {String keyword;int totalCount;String resultPath;Long sleepTime;public Conf() {}public String getKeyword() {return keyword;}public void setKeyword(String keyword) {this.keyword = keyword;}public int getTotalCount() {return totalCount;}public void setTotalCount(int totalCount) {this.totalCount = totalCount;}public String getResultPath() {return resultPath;}public void setResultPath(String resultPath) {this.resultPath = resultPath;}public Long getSleepTime() {return sleepTime;}public void setSleepTime(Long sleepTime) {this.sleepTime = sleepTime;}}
}

5.0 项目地址

github: https://github.com/HouYuSource/img_download.git

6.0 写在最后的话

这个爬虫是抓取百度图片的,也就是说百度图片 【http://image.baidu.com】有的图片,理论上都是能download下来的

请不要广泛使用,避免产生其他问题~

义务性贴出声明,避免揽事

====== 声 明 ======
1.0 禁止使用商业用途。
2.0 严禁倒卖。
3.0 使用本程序产生的一切法律问题由使用者承担,与软件和制作人无任何关系。
4.0 软件的用途用于学习与交流,请使用完毕后24小时内自觉删除!

如果使用过程中有任何问题欢迎反馈: for.houyu@foxmail.com

java爬虫写一个百度图片下载器相关推荐

  1. 百度图片下载器2.0

    前段时间写了一个百度图片下载器,结果发现有很多人需要使用.说实话之前写的那一款百度图片下载器比较LOW,今天刚好有时间就做了一下升级. 完整源代码的获取方式放在文末了,有需要的直接下载即可. 更新了两 ...

  2. 用Java写一个电影自动下载器

    你好! 下面是一些步骤来帮助你写一个电影自动下载器: 建立一个新的Java项目 选择一个电影下载网站作为数据源, 并使用网络爬虫或API来获取电影的信息(如标题, 时长, 格式, 大小等) 使用Jav ...

  3. 转:使用Python写一个m3u8多线程下载器

    转载:使用Python写一个m3u8多线程下载器 可去看原文:https://blog.csdn.net/muslim377287976/article/details/104340242 文章目录 ...

  4. 基于python3 的百度图片下载器

    自己写了玩的一个小脚本,百度图片下载 import re import os import requests import hashlibdef dowmloadPic(html, keyword): ...

  5. js 写一个前端图片查看器

    1. 前言 网上已经有不少成熟的图片查看器插件,如果是单纯想要点击图片放大预览的话,可以直接使用插件.例如viewerjs 但是,当打开图片后还需要对图片进行一些像删除.下载.标记等业务层面上的操作, ...

  6. Python爬虫实战(一) — Pixabay图片下载器

    前言 最近学习数据分析的时候,突然对网络爬虫有了兴趣,经过一些练习和资料的参考,编写了一些简单的爬虫代码,今天,我们来爬取Pixabay网站的图片. Pixabay我最常用的一家图片网站,可以说是全球 ...

  7. 用python爬虫制作图片下载器(超有趣!)

    这几天小菌给大家分享的大部分都是关于大数据,linux方面的"干货".有粉丝私聊小菌,希望能分享一些有趣的爬虫小程序.O(∩_∩)O哈哈,是时候露一手了.今天给大家分享的是一个适合 ...

  8. python图片下载器(百度图片)

    之前觉得爬虫很好玩,去网页上面抓取数据感觉很神奇.初次接触在导入包就出现了问题,requests没有导入到程序中,在cmd命令里面输入pip install requests,下载到一半的时候就报错了 ...

  9. 装X利器:做一个Python爬虫小工具——图片下载器

    一.项目描述 前言: 这是一个非常简单的网络爬虫,非常适合初学者了解Python连接网络的初级操作: 平时,如果我们要在网络上下载图片,大家的做法通常是右键,然后图片另存为,但是我们是程序员,我们当然 ...

最新文章

  1. 搭建基于Spring Cloud的微服务应用
  2. mysql的字符串处理函数
  3. 如何手工快速判断目标站是windows还是linux服务器
  4. 魅族8.0系统手机最完美激活xposed框架的步骤
  5. Qt 中pro文件换行注意的问题
  6. macOSX中使用python matplotlib模块的问题解决
  7. 设置Android Studio工程布局文件的默认布局
  8. (已解决)小程序 request:fail ssl hand shake error 安卓端websocket报错
  9. mysql result mysqli_MYSQLI_USE_RESULT or MYSQLI_STORE_RESULT
  10. 解决xgboost报错XGBoostError: XGBoost Library (libxgboost.dylib) could not be loaded
  11. 是否需要配置环境变量,比如maven,jdk等
  12. 产品设计:一层分类与多层分类模式的感悟
  13. java数据校验博客_springmvc教程:利用Validation进行参数校验
  14. nacos注册中心demo
  15. 一些web缓存相关的概念.cache-control expires no-cache no-store maxage
  16. 简单版WAF代码学习
  17. C#inSSIDer强大的wifi无线热点信号扫描器源码
  18. 努力是你最幸福的时候
  19. windows7打印时,显示脱机,提示“服务器打印后台处理程序服务没有运行”。...
  20. ip ban linux,在Linux中fail2ban:unban ip如何(使用fail2ban-client)

热门文章

  1. 计算机台式机硬盘,台式电脑硬盘和笔记本硬盘有什么区别【详解】
  2. 数学模型天气预测方法_预测即将到来的天气的新方法
  3. ssh 远程报错 Permission denied, please try again.(密码输入正确也无法登录)
  4. Vim 自定义补全利器 Snippet
  5. 过压保护电路(OVP)
  6. 基于java博网即时通讯软件的设计与实现
  7. asp.net mvc 连接sqlserver数据库
  8. 百度地图API,指定比例尺大小
  9. Facebook第三方登录对接
  10. 塔夫茨计算机科学,塔夫斯大学计算机科学博士专业详情及要求是怎样的?