ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] VBA 怎样批量下载网页图片?

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-11 17:05 | 显示全部楼层
哪位老师帮帮我,谢谢

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-11 18:32 | 显示全部楼层
quqiyuan 发表于 2024-8-10 22:42
我下载做好了,你下载一下算了,
通过百度网盘分享的文件:枪挑小梁王.pdf
链接:https://pan.baidu.co ...

老师,欣喜的告诉你,我抓取到网页的图片网址了,就是用VBA的,至于全不全不知道,大概有130个。有的是jpg的,有的是png的。请看我的附件有程序,也有图片网址。请老师继续帮我,
这些jpg文件怎么保存?

Desktop.zip

5.07 KB, 下载次数: 16

TA的精华主题

TA的得分主题

发表于 2024-8-11 18:52 | 显示全部楼层
dongdonggege 发表于 2024-8-11 18:32
老师,欣喜的告诉你,我抓取到网页的图片网址了,就是用VBA的,至于全不全不知道,大概有130个。有的是jp ...

    For Each oImg In oDoc.getElementsByClassName("BDE_Image")
    Debug.Print oImg.src
    Next

TA的精华主题

TA的得分主题

发表于 2024-8-11 18:58 | 显示全部楼层
dongdonggege 发表于 2024-8-11 18:32
老师,欣喜的告诉你,我抓取到网页的图片网址了,就是用VBA的,至于全不全不知道,大概有130个。有的是jp ...

晚上有空整理一下,今天一天在工地忙,没时间。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-11 19:06 | 显示全部楼层
zxsea_7426 发表于 2024-8-11 18:52
For Each oImg In oDoc.getElementsByClassName("BDE_Image")
    Debug.Print oImg.src
    Next

这是图片的网址,我要的是保存这个图片,怎么写?谢谢

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-11 19:08 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
zxsea_7426 发表于 2024-8-11 18:52
For Each oImg In oDoc.getElementsByClassName("BDE_Image")
    Debug.Print oImg.src
    Next

而且,有的网址前面是https,有的是about,怎么辨别是不是图片的网址?

TA的精华主题

TA的得分主题

发表于 2024-8-11 19:14 | 显示全部楼层
dongdonggege 发表于 2024-8-11 19:08
而且,有的网址前面是https,有的是about,怎么辨别是不是图片的网址?

Sub GetImgUrls()
    '工具——引用MicrosoftXML,v6.0
    '工具——引用Microsoft HTML Object Library
    Dim oDoc As HTMLDocument
    Dim url As String
    url = "https://tieba.baidu.com/p/1910382046"
    Set oDoc = New HTMLDocument        '加载目标页面
    oDoc.body.innerHTML = GetHttp(url)  '获取所有<img>标签
'    For Each oImg In oDoc.getElementsByTagName("img")
'    Debug.Print oImg.src
'    Next
    Dim link_ad$, fi_na$
    For Each oImg In oDoc.getElementsByClassName("BDE_Image")
'        Debug.Print oImg.src
        link_ad = oImg.src
        fd = Split(link_ad, ".")
        后缀 = fd(UBound(fd))
        n = n + 1
        fi_na = ThisWorkbook.path & "/" & n & "." & 后缀
        Call S_savefile(link_ad, fi_na)
    Next
   
End Sub

Function GetHttp(sUrl As String) As String
    Dim oXHTTP As Object
    Set oXHTTP = CreateObject("MSXML2.XMLHTTP") '获取网页源代码
    oXHTTP.Open "GET", sUrl, False
    oXHTTP.send
        GetHttp = oXHTTP.responseText
End Function
Sub S_savefile(sUrl As String, sfile_name1 As String)
    Dim oXHTTP As Object
'    Set oXHTTP = CreateObject("MSXML2.XMLHTTP") '获取网页源代码
    Set oXHTTP = CreateObject("microsoft.xmlhttp")
    oXHTTP.Open "GET", sUrl, False
    oXHTTP.send
    Dim rebo()  As Byte
    rebo = oXHTTP.responseBody
    Open sfile_name1 For Binary As #1
    Put #1, , rebo()
    Close #1
End Sub

供参考: 1723374863960.png

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-8-11 19:58 | 显示全部楼层
import requests
import os
from lxml import etree
from concurrent.futures import ThreadPoolExecutor


class Image(object):
    def __init__(self, path):
        self.headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36",
        }
        self.url = "https://tieba.baidu.com/p/1909682384"
        self.params = {"pn": "1"}
        self.path = path
        self.create_folders()

    def create_folders(self):
        if not os.path.exists(self.path):
            os.makedirs(self.path)

    def get_image_sources(self):
        response = requests.get(self.url, headers=self.headers, params=self.params)
        response.encoding = response.apparent_encoding
        html = etree.HTML(response.text)
        return html.xpath('//img[@class="BDE_Image"]/@src')

    def download_image(self, src):
        img_name = src.split('/')[-1]
        img_url = "https://imgsa.baidu.com/forum/pic/item/" + img_name
        try:
            img_data = requests.get(img_url, headers=self.headers).content
            with open(f"{self.path}/{img_name}", 'wb') as f:
                f.write(img_data)
            print(f"图片{img_name}下载完成!")
        except :
            print(f"图片{img_name}下载失败.........")

    def download_pictures(self):
        srcs = self.get_image_sources()
        with ThreadPoolExecutor(max_workers=20) as executor:
            executor.map(self.download_image, srcs)


if __name__ == '__main__':
    path = "./说岳全传"
    downloader = Image(path)
    downloader.download_pictures()

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-8-12 00:39 来自手机 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-8-12 07:11 | 显示全部楼层
image.png
image.jpg
image.png
运行后会提示输入网址,然后提示输入保存的文件名,它就可以自动下载图片,然后形成一个PDF文件。此类为爬虫代码,参考了些网络的代码,我觉得很好用的了。仅供参考。。。

爬虫-网页图片-输出PDF文件.rar

1.76 KB, 下载次数: 15

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 12:26 , Processed in 0.049709 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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