ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1898|回复: 6

[求助] 请问怎样从网上批量下载图片啊?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-8-18 08:02 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
import threading # 导入多线程库
import requests
import os
'''
URL替换:
https://gitee.com/kevin2046/picture/raw/master/img/
https://gitee.com/kevin2046/pic/raw/master/img/
https://gitee.com/kevin2046/pict/raw/master/img
https://gitee.com/kevin2099/pict/raw/master/img/
https://gitee.com/kevin2099/pic/tree/master/img/
https://gitee.com/kevin2099/tupian/tree/master/img/
https://gitee.com/kevin2099/tu/tree/master/img/
'''
i = 0 # 先定义一个全局变量i,用于猜测图片的ID
def get_pic(i) : # 定义下载图片的函数
    # 拼接图片URL,将主函数while中的i传到这里,相当于是图片的ID
    picurl = 'https://gitee.com/kevin2046/picture/raw/master/img/' + str(i) + '.jpg'
    if os.path.exists('图片\\%s.jpg'%i): # 判断图片已经下载
        print('图片%s.jpg已下载!' % i) # 已下载就不再下载
    else: # 没有下载才下载
        pic = requests.get(picurl).content # 取得链接
        rec = len(pic) # 取得图片的大小
        if rec != 52: # 判断图片大小不是52字节,因为大小为52字节,说明图片有错
            print('(≧^.^≦)喵~~~正在下载:' + picurl)
            with open('图片\\%s.jpg'%i, 'wb') as f:# 图片没错就下载
                f.write(pic)
        else: # 图片有错就pass掉
            pass
if __name__ == '__main__' : # 设置主函数
    try:
        os.mkdir('图片') # 创建一个目录,知道有人习惯在桌面打开,建个目录安全点
    except:
        pass
    while i < 15000:
        i += 1 # 让i在1-15000中遍历,猜测图片的ID,,本套图的ID最多是12000+
        # 重头戏。设置多线程,我也是初学,还不太懂原理,见着比我用for循环,单个下载是要快得多
        # 还在继续学习中,学海无涯,学无止境!!
        # target用于调用先前创建的下载图片的函数,kwargs用于设置函数中的变量值
        t1 = threading.Thread(target=get_pic, kwargs={'i' : i})
        t1.start() # 启动多线程


上面是python代码,用VBA能不能达到同样的功能啊?
谢谢!!

TA的精华主题

TA的得分主题

发表于 2020-8-18 09:00 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
VBA多线程爬异步虫是很麻烦的。

TA的精华主题

TA的得分主题

发表于 2020-8-18 09:03 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
没用过迅雷这样的下载工具吗

TA的精华主题

TA的得分主题

发表于 2020-8-18 09:43 | 显示全部楼层
不喜欢拿python到这里踩场,vba也可以批量下载图片的,严重怀疑你开车!
Option Explicit
Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Public Declare Function DeleteUrlCacheEntry Lib "wininet" Alias "DeleteUrlCacheEntryA" (ByVal lpszUrlName As String) As Long
Sub test1()
    Dim nUrl As String, localFilename As String, lngRetVal As Long, i
    For i = 1 To 100
        nUrl = "https://gitee.com/kevin2046/picture/raw/master/img/" & i & ".jpg"
        localFilename = ThisWorkbook.Path & Application.PathSeparator & i & ".jpg"
        DeleteUrlCacheEntry nUrl
        lngRetVal = URLDownloadToFile(0, nUrl, localFilename, 0, 0)
        If lngRetVal <> 0 Then
            MsgBox "失败"
        End If
    Next i
    MsgBox "OK"
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-8-18 16:02 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 天山神鹰 于 2020-8-18 16:07 编辑
ammyc 发表于 2020-8-18 09:43
不喜欢拿python到这里踩场,vba也可以批量下载图片的,严重怀疑你开车!
Option Explicit
Private Declar ...

多谢啦!!我试试看!
我用的是64位系统,提示编译错误,如下图所示:
编译错误.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-8-18 16:28 | 显示全部楼层
找到64位系统的解决办法了:将Declare  改成 Declare PtrSafe

TA的精华主题

TA的得分主题

发表于 2022-12-13 21:29 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-20 08:39 , Processed in 0.037136 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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