吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 101|回复: 6
上一主题 下一主题
收起左侧

[经验求助] 获取CSV中的图片链接,并下载保存到对应文件夹中

[复制链接]
跳转到指定楼层
楼主
kaijie117 发表于 2024-11-23 02:34 回帖奖励
200吾爱币
本帖最后由 kaijie117 于 2024-11-23 16:02 编辑

获取CSV中第AE列(第31列)每行数据为图片链接
获取第C列(第3列)每行数据,作为文件夹名称
   其中每行单元格包含多个图片链接,它们使用,隔开
   下载到对应C列数据的文件夹中,图片文件名保留原文件名

举例

C列     AE列
TEST   ,

保存结果
文件夹TEST
     包含图片
     bd462b3f96eaca92.jpg
     9b317940dca5fc26.png

图片类型:webp,jpg,png 等几种常见的图片格式
若某行的AE列没有图片链接则跳过该行.

感谢

最佳答案

查看完整内容

写了个powershell脚本(类似于bat批处理脚本)https://x.ws28.cn/f/fn0xkvz9bal 复制链接到浏览器打开 1、下载后放到和你的CSV文件同级文件夹下,右键,用记事本打开,按照下面的图片改一下内容, 改一下csv文件名,第3列的列名,第31列的列名 我测试用的test.csv 2、保存后,右键,选择”使用 PowerShell 运行“。

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

沙发
DetectiveConan 发表于 2024-11-23 02:34
写了个powershell脚本(类似于bat批处理脚本)https://x.ws28.cn/f/fn0xkvz9bal 复制链接到浏览器打开

1、下载后放到和你的CSV文件同级文件夹下,右键,用记事本打开,按照下面的图片改一下内容,
改一下csv文件名,第3列的列名,第31列的列名



我测试用的test.csv



2、保存后,右键,选择”使用 PowerShell 运行“。
3#
rootbot007 发表于 2024-11-23 10:31
个人已经尝试了直接在csv中编写对应vb代码有效性,其中有一些前提条件:
1. 数据在第一个表格
[Visual Basic] 纯文本查看 复制代码
Set ws = ThisWorkbook.Sheets(1) ' 假设数据在第一个工作表

2. 数据是从第一行开始的,也就是没有标题数据,若不是可以更改代码中对应数字即可
[Visual Basic] 纯文本查看 复制代码
For i = 1 To lastRow ' 假设数据从第1行开始


接下来是所有代码,可直接在csv文件中运行
[Visual Basic] 纯文本查看 复制代码
Sub DownloadImagesFromCSV()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim folderName As String
    Dim imageLinks As String
    Dim links() As String
    Dim link As String
    Dim fileName As String
    Dim imgFolderPath As String
    Dim currentDir As String
    Dim linkIndex As Long
    Dim imgPath As String
    
    currentDir = ThisWorkbook.Path

    ' 当前工作表
    Set ws = ThisWorkbook.Sheets(1) ' 假设数据在第一个工作表

    ' 获取最后一行
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    ' 遍历每一行数据
    For i = 1 To lastRow ' 假设数据从第1行开始
        folderName = ws.Cells(i, 3).Value ' 获取 C 列作为文件夹名
        imageLinks = ws.Cells(i, 31).Value ' 获取 AE 列作为图片链接

        ' 如果 AE 列没有图片链接,跳过该行
        If Len(Trim(imageLinks)) = 0 Then
            GoTo SkipRow
        End If

        ' 分割多个图片链接(以逗号分隔)
        links = Split(imageLinks, ",")

        ' 如果 links 数组没有有效的图片链接,跳过该行
        If UBound(links) < 0 Then
            GoTo SkipRow
        End If

        ' 创建相对路径的文件夹(如果不存在)
        imgFolderPath = currentDir & "\" & folderName
        If Dir(imgFolderPath, vbDirectory) = "" Then
            MkDir imgFolderPath
        End If

        ' 下载每个图片
        For linkIndex = 0 To UBound(links)
            link = Trim(links(linkIndex)) ' 获取当前链接
            If link <> "" Then
                ' 获取图片的文件名(从链接中提取)
                fileName = Mid(link, InStrRev(link, "/") + 1)
                imgPath = imgFolderPath & "\" & fileName

                ' 调用 DownloadFile 函数来下载图片
                Call DownloadFile(link, imgPath)
            End If
        Next linkIndex
        
SkipRow:
    Next i

    MsgBox "图片下载完成!"
End Sub

' 下载文件的函数
Sub DownloadFile(url As String, filePath As String)
    Dim httpRequest As Object
    Dim byteArray() As Byte
    Dim fileNumber As Integer

    ' 创建 HTTP 请求对象
    Set httpRequest = CreateObject("MSXML2.XMLHTTP")
    
    ' 发送 GET 请求
    httpRequest.Open "GET", url, False
    httpRequest.Send
    
    ' 检查请求是否成功
    If httpRequest.Status = 200 Then
        ' 获取响应体(二进制数据)
        byteArray = httpRequest.responseBody
        
        ' 获取文件号
        fileNumber = FreeFile
        
        ' 打开文件进行写入
        Open filePath For Binary Access Write As #fileNumber
        
        ' 写入数据
        Put #fileNumber, , byteArray
        
        ' 关闭文件
        Close #fileNumber
    Else
        MsgBox "下载失败,HTTP 状态码: " & httpRequest.Status, vbCritical
    End If
End Sub

4#
 楼主| kaijie117 发表于 2024-11-23 15:21 |楼主
rootbot007 发表于 2024-11-23 10:31
个人已经尝试了直接在csv中编写对应vb代码有效性,其中有一些前提条件:
1. 数据在第一个表格
[mw_shl_cod ...

按照要求设置为第一个工作蒲.将For i = 1 To lastRow修改为 For i = 2 To lastRow

运行DownloadImagesFromCSV  启动运行.秒提示图片下载成功.
查看目录,并未创捷文件夹和下载文件
5#
 楼主| kaijie117 发表于 2024-11-23 15:25 |楼主

运行前的设置,因为没有用过VB代码.不知道有没有错误
6#
 楼主| kaijie117 发表于 2024-11-23 17:58 |楼主
DetectiveConan 发表于 2024-11-23 02:34
写了个powershell脚本(类似于bat批处理脚本)https://x.ws28.cn/f/fn0xkvz9bal 复制链接到浏览器打开

1 ...

下载的时候能不能加个重试次数5次, 出现网络波动它就跳过了
7#
DetectiveConan 发表于 2024-11-23 18:05
kaijie117 发表于 2024-11-23 17:58
下载的时候能不能加个重试次数5次, 出现网络波动它就跳过了

https://x.ws28.cn/f/fn1ht3xk1pm 复制链接到浏览器打开

第25行,$maxRetries = 5
现在是5次,你想几次就改成几次

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
kaijie117 + 1 + 1 谢谢@Thanks!

查看全部评分

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

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 05:08

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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