如何用VBA结合IE抓取亚马逊商品图并嵌入Excel对应ASIN旁
修改后的完整VBA代码
Sub GetImages() Const BASE_URL$ = "https://www.amazon.in/dp/" Dim IE As Object, ws As Worksheet, cel As Range Dim imgSrc As String ' 图片尺寸可根据需求自行调整数值 Const IMG_WIDTH As Integer = 100 Const IMG_HEIGHT As Integer = 100 Set ws = ThisWorkbook.Worksheets("Sheet1") Set IE = CreateObject("InternetExplorer.Application") IE.Visible = False ' 提前调整B列列宽和对应行高适配图片显示 ws.Columns("B").ColumnWidth = IMG_WIDTH / 7 For Each cel In ws.Range("A2:A" & ws.Cells(ws.Rows.Count, 1).End(xlUp).Row) cel.RowHeight = IMG_HEIGHT * 0.75 Next cel ' 遍历ASIN抓取并插入图片 For Each cel In ws.Range("A2:A" & ws.Cells(ws.Rows.Count, 1).End(xlUp).Row) On Error Resume Next IE.navigate BASE_URL & cel.Value While IE.Busy Or IE.readyState < 4: DoEvents: Wend imgSrc = IE.document.querySelector("[id='imgTagWrapperId'] > img").getAttribute("src") If Err.Number = 0 And imgSrc <> "" Then ' 插入图片到B列对应单元格 ws.Shapes.AddPicture _ Filename:=imgSrc, _ LinkToFile:=0, _ SaveWithDocument:=1, _ Left:=cel.Offset(0, 1).Left, _ Top:=cel.Top, _ Width:=IMG_WIDTH, _ Height:=IMG_HEIGHT End If Err.Clear On Error GoTo 0 ' 抓取量大可取消下方注释添加延迟,避免触发反爬 ' Application.Wait Now + TimeValue("00:00:02") Next cel ' 释放IE对象,避免后台残留进程 IE.Quit Set IE = Nothing MsgBox "图片插入完成" End Sub
关键改动说明
- 替换原写入URL的逻辑,调用
Shapes.AddPicture方法直接插入网络图片到B列对应单元格,设置图片随Excel文件保存,不需要额外保留原图链接 - 新增图片尺寸配置项,调整
IMG_WIDTH和IMG_HEIGHT的数值即可自定义图片显示大小,同时会自动适配调整对应行高和B列列宽 - 新增错误处理逻辑,遇到无效ASIN、页面加载失败、元素抓取失败的场景会自动跳过,不会导致脚本中途崩溃
- 新增IE资源释放逻辑,避免Internet Explorer进程残留在后台占用系统资源
注意事项
- 亚马逊有反爬机制,如果批量抓取大量ASIN时触发人机验证,可取消代码中延迟逻辑的注释,降低访问频率
- 如果需要图片和单元格绑定,随单元格移动调整大小,可在插入图片后新增代码设置图片的属性:
Selection.Placement = xlMoveAndSize
内容的提问来源于stack exchange,提问作者SMTH
相关产品推荐
相关产品推荐

