图片批量下载及代码分析

数据来源分析:

1、打开网页开发者工具并打开Fetch/XHR面板

2、再转到包含图片url的网址

 3、分析前30张图片和后30张图片的url区别

4、开始请求获取并保存数据

4.1代码展示

import json
import os
import pprint

import requests


keyword = input('输入查询关键字:')
for j in range(1, 21):
    url = '图片上分析出来的url'

    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                      'Chrome/102.0.0.0 '
                      'Safari/537.36 '
    }
    if not os.path.exists(f'{keyword}图片'):
        os.makedirs(f'{keyword}图片')
    res = requests.get(url=url, headers=headers).json()
    # pprint.pprint(res)
    for data_url in res['data']:
        try:
            url = data_url['replaceUrl'][0]['ObjURL']
            title = data_url['fromPageTitleEnc'].replace('?', '').replace('"', '').replace('/', '').replace('>', '').replace(':', '').replace('|', '').replace('*', '').replace('\\', '')
            img_content = requests.get(url=url, headers=headers).content
            with open(f'{keyword}图片/%s.jpg' % title, 'wb') as f:
                f.write(img_content)
            print('%s.jpg下载完成!' % title)
        except KeyError:
            pass

4.2代码分析

4.2.1请求数据部分

4.2.2res的可视化展示

4.2.3res数据分析

 5、筛选过滤得到图片url和名字并保存

6、结果展示 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
运行环境 .NET Framework2.0 开发工具 Microsoft Visual Studio 2005 二. 部分代码说明(主要讲解异步分析下载): 异步分析下载采取的策略是同时分析同时下载,即未等待数据全部分析完毕就开始把已经分析出来的图片链接开始下载下载成功的均在List框链接前面划上了√ ,未能下载图片有可能是分析错误或者是下载异常。 1. 异步分析部分代码 /// /// 异步分析下载 /// private void AsyncAnalyzeAndDownload(string url, string savePath) { this.uriString = url; this.savePath = savePath; #region 分析计时开始 count = 0; count1 = 0; freq = 0; result = 0; QueryPerformanceFrequency(ref freq); QueryPerformanceCounter(ref count); #endregion using (WebClient wClient = new WebClient()) { AutoResetEvent waiter = new AutoResetEvent(false); wClient.Credentials = CredentialCache.DefaultCredentials; wClient.DownloadDataCompleted += new DownloadDataCompletedEventHandler(AsyncURIAnalyze); wClient.DownloadDataAsync(new Uri(uriString), waiter); //waiter.WaitOne(); //阻止当前线程,直到收到信号 } } /// /// 异步分析 /// protected void AsyncURIAnalyze(Object sender, DownloadDataCompletedEventArgs e) { AutoResetEvent waiter = (AutoResetEvent)e.UserState; try { if (!e.Cancelled && e.Error == null) { string dnDir = string.Empty; string domainName = string.Empty; string uri = uriString; //获得域名 http://www.sina.com/ Match match = Regex.Match(uri, @"((http(s)?://)?)+[\w-.]+[^/]");//, RegexOptions.IgnoreCase domainName = match.Value; //获得域名最深层目录 http://www.sina.com/mail/ if (domainName.Equals(uri
在 Spring Boot 中,实现图片上传和下载可以借助于 Spring Web 模块提供的 MultipartFile 接口和 Resource 接口。 上传图片的步骤如下: 1. 在前端页面中使用表单提交方式将图片传递到后端控制器。 2. 在后端控制器中使用 MultipartFile 接口接收图片,并将其保存到指定的路径中。 3. 返回上传成功的信息。 示例代码如下: ```java @PostMapping("/upload") public String uploadImage(@RequestParam("file") MultipartFile file) { try { // 保存图片到指定路径 String filePath = "path/to/save/image"; file.transferTo(new File(filePath)); return "Upload success!"; } catch (IOException e) { e.printStackTrace(); return "Upload failed!"; } } ``` 下载图片的步骤如下: 1. 在前端页面中使用链接或按钮触发后端控制器。 2. 在后端控制器中将指定路径下的图片读取到 Resource 接口中,并返回该资源。 3. 在前端页面中使用 img 标签将资源展示出来。 示例代码如下: ```java @GetMapping("/download") public ResponseEntity<Resource> downloadImage() { // 获取图片资源 String filePath = "path/to/save/image"; Resource resource = new FileSystemResource(filePath); // 构建响应头 HttpHeaders headers = new HttpHeaders(); headers.add("Content-Type", "image/png"); headers.add("Cache-Control", "no-cache, no-store, must-revalidate"); headers.add("Pragma", "no-cache"); headers.add("Expires", "0"); // 返回响应实体 return ResponseEntity.ok() .headers(headers) .contentLength(resource.contentLength()) .body(resource); } ``` 需要注意的是,在实际开发中,为了避免文件名重复等问题,应该对上传的图片进行重命名,而且要对文件的大小、格式等进行校验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一笑_奈何

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值