vbs结合wget 实现下载网站图片

vbs 函数过程:
1. 调用wget: 下载网站所有页面到本脚本目录 ……
2. 扫描本脚本目录中所有文件 ……
3. 读取本脚本目录中的所有网页,匹配图片 URL 地址 ……
4. 保存所有图片 URL 地址到 url-img.txt 文件 ……
5. 调用wget: 下载 url-img.txt 指定的图片到本脚本 img 目录 ……

' wget_img.vbs
Call Main()
Sub Main()

 ' CMD 模式
 If Not (LCase(Right(WScript.FullName,11)) = LCase("CScript.exe")) Then
  CreateObject("WScript.Shell").Run "cscript.exe //nologo """ & WScript.ScriptFullName & """", 1, False
  WScript.Quit(1)
 End If

 Dim wso, strMeDir
 Set wso = WScript.CreateObject("WScript.Shell")
 strMeDir = Left(WScript.ScriptFullName, InStrRev(WScript.ScriptFullName,"\")-1)
 ' 启动 wget下载网站所有页面到本脚本目录的 720.hao2046.net 文件夹
 WScript.Echo "1. 启动 wget下载网站所有页面到本脚本目录的 720.hao2046.net 文件夹 ……"
 wso.Run "wget -r -p -k -c -x -A=jpg,htm,html 720.hao2046.net -P """ & strMeDir & """", 1, True

 ' 扫描 720.hao2046.net 文件夹中所有文件
 WScript.Echo "2. 扫描 720.hao2046.net 文件夹中所有文件 ……"
 Dim strFolderspec, strHTML, strURL
 Dim arr() : ReDim Preserve arr(0)
 strFolderspec = strMeDir & "\720.hao2046.net"
 Call ScanFolder(arr, strFolderspec)

 ' 建立正则表达式。
 Dim regEx
 Set regEx = CreateObject("VBScript.RegExp")   ' 建立正则表达式。
 regEx.IgnoreCase = True   ' 设置是否区分大小写。
 regEx.Global = True     ' 设置全局替换。
 regEx.MultiLine = True   ' 设置多行匹配模式

 ' 查找所有文件
 WScript.Echo "3. 读取 720.hao2046.net 文件夹中的所有网页,匹配图片 URL 地址 ……"
 For i = 0 To UBound(arr)
   If LCase(Right(arr(i),5)) = ".html" Or LCase(Right(arr(i),4)) = ".htm" Then
     ' 读取文件,匹配图片 URL 地址
     strHTML = ReadPfile(arr(i), "gb2312")
     regEx.Pattern = "src=['""]http://\S+\.jpg['""]"
     Set Matches = regEx.Execute(strHTML)   ' 执行搜索。
     For Each Match in Matches ' 遍历匹配集合。
       If Not Match.Value = "" Then
         regEx.Pattern = "(src=['""])*(['""])*"
         strURL = strURL & regEx.Replace(Match.Value, "") & vbCrLf
       End If
     Next
   End If
 Next

 ' 保存所有图片 URL 地址
 WScript.Echo "4. 保存所有图片 URL 地址到 url-img.txt 文件 ……"
 Call SavePfile(strMeDir & "\url-img.txt", "utf-8", strURL) 

 ' 启动 wget 下载图片到本脚本 img 目录
 WScript.Echo "5. 启动 wget 下载 url-img.txt 指定的图片到本脚本 img 目录 ……"
 wso.Run "wget -c -x -t 5 -i """ & strMeDir & "\url-img.txt"" -P """ & strMeDir & "\img""", 1, True

 Msgbox "完成!"
End Sub

'===========================================================================================
'按编码读取txt文件内容
Function ReadPfile(ByVal FileName, ByVal FileCode)
  Dim objStream
  Set objStream = CreateObject("ADODB.Stream")
  '
  With objStream
    .Type = 2
    .Mode = 3
    .open
    .Charset = FileCode   '不同编码时自己换,Chinese (Simplified) (GB2312),中文 GBK ,繁体中文 Big5 ,日文 EUC-JP ,韩文 EUC-KR,charset=UTF-8(国际化编码),ANSI,Unicode,unicode big endian
    .LoadFromFile FileName
     ReadPfile = .ReadText
    .Close
  End With
  Set objStream = Nothing
End Function

'===========================================================================================
'保存文件为unicode格式文本
Function SavePfile(ByVal FileName, ByVal FileCode, ByVal TextString)
  Dim objStream
  Set objStream = CreateObject("ADODB.Stream")
  With objStream
    .Type = 2
    .Mode = 3
    .Charset = FileCode   '不同编码时自己换,Chinese (Simplified) (GB2312),中文 GBK ,繁体中文 Big5 ,日文 EUC-JP ,韩文 EUC-KR,charset=UTF-8(国际化编码),ANSI,Unicode,unicode big endian
    .open
    .WriteText TextString
    .SaveToFile FileName, 2
    .Close
  End With
  Set objStream = Nothing
End Function

'  Dim arr() : ReDim Preserve arr(0)
'  Call ScanFolder(arr, "V:\")
Sub ScanFolder(ByRef arr, ByVal strFolderspec)
  On Error Resume Next
  Dim fso, objFolder
  Set fso = Createobject("Scripting.FileSystemObject")
  Set objFolder = fso.getfolder(strFolderspec)
  ReDim Preserve arr(UBound(arr)+1)
  arr(UBound(arr)) = strFolderspec & "\"
  For Each subFile In objFolder.files
    ReDim Preserve arr(UBound(arr)+1)
    arr(UBound(arr)) = subFile.path
  Next
  For Each subFolder In objFolder.subfolders
    ScanFolder arr, subFolder.path
  Next
  Set fso = NoThing
  Set objFolder = NoThing
End Sub

附网页文件查找字符串代码(findstr_html.vbs):

' findstr_html.vbs
Call Main()
Sub Main()

 ' CMD 模式
 If Not (LCase(Right(WScript.FullName,11)) = LCase("CScript.exe")) Then
  CreateObject("WScript.Shell").Run "cscript.exe //nologo """ & WScript.ScriptFullName & """", 1, False
  WScript.Quit(1)
 End If

 Dim strMeDir
 strMeDir = Left(WScript.ScriptFullName, InStrRev(WScript.ScriptFullName,"\")-1)
 Dim regEx, strHTML, strURL

 ' 扫描文件夹
 Dim arr() : ReDim Preserve arr(0)
 Call ScanFolder(arr, strMeDir & "\720.hao2046.net")
 If UBound(arr) = 0 Then
  WScript.Echo strMeDir & "\720.hao2046.net" & ", Not Found!"
  Exit Sub
 End If

 ' 建立正则表达式。
 Set regEx = CreateObject("VBScript.RegExp")   ' 建立正则表达式。
 regEx.IgnoreCase = True   ' 设置是否区分大小写。
 regEx.Global = True     ' 设置全局替换。
 regEx.MultiLine = True   ' 设置多行匹配模式

 Do
  strPattern = InputBox("请输入要匹配的正则表达式:","查找所有网页文件","123456")
  strInfo = strPattern & vbCrLf & "Not Found!"
  For i = 0 To UBound(arr)
   If LCase(Right(arr(i),5)) = ".html" Or LCase(Right(arr(i),4)) = ".htm" Then
    'WScript.Echo arr(i)
    strHTML = ReadPfile(arr(i), "gb2312")
    If InStr(strHTML, strPattern)>0 Then
     strInfo = strPattern & vbCrLf & arr(i) & vbCrLf
     Exit For
    Else
     'regEx.Pattern = "src=['""]http://\S+\.jpg['""]"
     regEx.Pattern = strPattern
     Set Matches = regEx.Execute(strHTML)   ' 执行搜索。
     For Each Match in Matches ' 遍历匹配集合。
      If Not Match.Value = "" Then
       'regEx.Pattern = "(src=['""])*(['""])*"
       'strURL = strURL & regEx.Replace(Match.Value, "") & vbCrLf
       strInfo = strPattern & vbCrLf & arr(i) & vbCrLf
       Exit For
      End If
     Next
    End If
   End If
  Next
  WScript.Echo strInfo
  Loop
End Sub

'===========================================================================================
'按编码读取txt文件内容
Function ReadPfile(ByVal FileName, ByVal FileCode)
  Dim objStream
  Set objStream = CreateObject("ADODB.Stream")
  '
  With objStream
    .Type = 2
    .Mode = 3
    .open
    .Charset = FileCode   '不同编码时自己换,Chinese (Simplified) (GB2312),中文 GBK ,繁体中文 Big5 ,日文 EUC-JP ,韩文 EUC-KR,charset=UTF-8(国际化编码),ANSI,Unicode,unicode big endian
    .LoadFromFile FileName
     ReadPfile = .ReadText
    .Close
  End With
  Set objStream = Nothing
End Function

'  Dim arr() : ReDim Preserve arr(0)
'  Call ScanFolder(arr, "V:\")
Sub ScanFolder(ByRef arr, ByVal strFolderspec)
  On Error Resume Next
  Dim fso, objFolder
  Set fso = Createobject("Scripting.FileSystemObject")
  Set objFolder = fso.getfolder(strFolderspec)
  ReDim Preserve arr(UBound(arr)+1)
  arr(UBound(arr)) = strFolderspec & "\"
  For Each subFile In objFolder.files
    ReDim Preserve arr(UBound(arr)+1)
    arr(UBound(arr)) = subFile.path
  Next
  For Each subFolder In objFolder.subfolders
    ScanFolder arr, subFolder.path
  Next
  Set fso = NoThing
  Set objFolder = NoThing
End Sub

提示: 
1. 警告:请不要直接运行代码,这里的示范网址可能无法访问、或缺乏安全性,请改为其他网址再使用。
2. 请将 wget.exe 放置于脚本同一目录下,然后执行。文件结构如下:
  ..\wget.exe
  ..\wget_img.vbs
  ..\findstr_html.vbs

(0)

相关推荐

  • 每天一个linux命令(61):wget命令详解

    Linux系统中的wget是一个下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,我们经常要下载一些软件或从远程服务器恢复备份到本地服务器.wget支持HTTP,HTTPS和FTP协议,可以使用HTTP代理.所谓的自动下载是指,wget可以在用户退出系统的之后在后台执行.这意味这你可以登录系统,启动一个wget下载任务,然后退出系统,wget将在后台执行直到任务完成,相对于其它大部分浏览器在下载大量数据时需要用户一直的参与,这省去了极大的麻烦. wget 可以跟踪HTML页面上

  • apache使用.htaccess文件实现屏蔽wget下载网站内容

    经发现,虽然wget遵循 robots.txt 规则,但是那个还是可以绕过去,现在把我自己使用的屏蔽方法分享给大家: 1. 屏蔽下载任何文件 .htaccess SetEnvIfNoCase User-Agent "^wget" bad_bot <Limit GET POST> Order Allow,Deny Allow from all Deny from env=bad_bot </Limit> 2. 屏蔽下载部分文件 .htaccess SetEnvIf

  • Lua中rawset和rawget的作用浅析

    rawget是为了绕过__index而出现的,直接点,就是让__index方法的重写无效.(我这里用到"重写"二字,可能不太对,希望能得到纠正) 复制代码 代码如下: Window = {}    Window.prototype = {x = 0 ,y = 0 ,width = 100 ,height = 100,}  Window.mt = {}  function Window.new(o)      setmetatable(o ,Window.mt)      return

  • C语言实现类似wget的进度条效果

    本文主要是类似wget的进度条的实现,实际就是转移符\r的使用,\r的作用是返回至行首而不换行 复制代码 代码如下: #include <stdio.h> #include <stdlib.h> #include <unistd.h> //类似wget的进度条的实现,实际就是转移符\r的使用,\r的作用是返回至行首而不换行 int main(int argc, char *argv[]) {     unsigned len = 60;     char *bar =

  • 使用wget递归镜像网站

    有时间看到别人网站的页面比较漂亮,就想给扒皮下来,学习学习.分享一个我常用网站扒皮命令wget 这个命令可以以递归的方式下载整站,并可以将下载的页面中的链接转换为本地链接. wget加上参数之后,即可成为相当强大的下载工具. wget命令详解 wget -r -p -np -k http://xxx.com/xxx -r, --recursive(递归) specify recursive download.(指定递归下载) -k, --convert-links(转换链接) make link

  • windows系统配制wget计划任务脚本

    大家都知道wget在Linux.Unix下用得非常爽,在windows下建立计划任务,定时请求一个URL,wget优势就来了.我试几种方法,要么打开了浏览器,要么就弹出命令行的窗口,这非常讨厌!下面介绍一种更好的方法 1.下载wget windows版的文件 http://users.ugent.be/~bpuype/wget/2.新建一个vbe文件,在这个文件里调用bat文件3.新建一个bat文件,在这个文件使用wget4.把vbe添加到计划任务里 vbe文件 复制代码 代码如下: set w

  • dos利用wget.exe让杀毒软件升级更自动化

    首先感谢xhj版主为广大用户提供了杀毒软件的光盘.优盘集合,并提供了杀毒软件的升级方法.在使用杀毒软件的升级时,hxj使用windows的命令行方式提供升级,命令如下:IEXPLORE http://...,使用这个命令,需要用户指定下载的位置,很是不爽(这个winrar也一样),有没有其他的方式,只要用户一点击升级全自动呢?其实是可以做到的. wget是linux下的从网络上自动下载文件的自由工具,它支持HTTP,HTTPS和FTP协议,可以使用HTTP代理,目前已经移植到WINDOWS下.它

  • Linux中curl命令和wget命令的使用介绍与比较

    本文介绍的是Linux中curl命令和wget命令,这两者都是用来下载文件的工具,下面来看看详细的介绍: 一.wget wget是linux最常用的下载命令, 一般的使用方法是: wget + 空格 + 要下载文件的url路径 例1: wget http://www.minjieren.com/wordpress-3.1-zh_CN.zip 下载文件保存到当前目录,文件名默认是url最后一个/后面的内容,这里就是 wordpress-3.1-zh_CN.zip 例2: wget -O myfil

  • Linux的wget命令详解

    Linux wget是一个下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,尤其对于网络管理员,经常要下载一些软件或从远程服务器恢复备份到本地服务器.如果我们使用虚拟主机,处理这样的事务我们只能先从远程服务器下载到我们电脑磁盘,然后再用ftp工具上传到服务器.这样既浪费时间又浪费精力,那不没办法的事.而到了Linux VPS,它则可以直接下载到服务器而不用经过上传这一步.wget工具体积小但功能完善,它支持断点下载功能,同时支持FTP和HTTP下载方式,支持代理服务器和设置起来

  • PowerShell小技巧之实现文件下载(类wget)

    对Linux熟悉的读者可能会对Linux通过wget下载文件有印象,这个工具功能很强大,在.NET环境下提到下载文件大多数人熟悉的是通过System.Net.WebClient进行下载,这个程序集能实现下载的功能,但是有缺陷,如果碰上类似于-/scripts/?dl=417这类的下载链接将无法正确识别文件名,下载的文件通常会被命名为dl=417这样古怪的名字,其实对应的文件名是在访问这个链接返回结果的HTTP头中包含的.事实上微软也提供了避免这些缺陷的程序集System.Net.HttpWebR

  • Linux下模拟http的get/post请求(curl or wget)详解

    Linux下模拟http的get/post请求(curl or wget)详解 背景 最近项目中需要测试接口,但是测试服务器通过堡垒机才能访问,暂时又没有通过Nginx进行转发,只好直接在Linux上模拟http请求进行测试. 方法 get请求 curl "http://www.baidu.com" 如果URL指向的是一个文件或者一幅图可以直接下载到本地 curl -i "http://www.baidu.com" 显示全部信息 curl -l "http

  • wget各种选项分类列表与下载

    wget各种选项分类列表 "    启动    -V,  --version           显示wget的版本后退出   -h,  --help              打印语法帮助   -b,  --background        启动后转入后台执行   -e,  --execute=COMMAND   执行`.wgetrc'格式的命令,wgetrc格式参见/etc/wgetrc或~/.wgetrc "    记录和输入文件    -o,  --output-file=F

随机推荐