[已解决]如何从网页中提取符合要求的链接 以实现 Win7补丁自动下载
本帖最后由 pvguo 于 2012-8-29 14:13 编辑如何从网页中提取符合要求的链接 以实现Win7补丁自动下载
因为要用dism给win7映像离线添加补丁(速度快,不用封装)
但是懒得装个原版win7再用360下载补丁
所以把雨林木风的补丁列表提取出来,然后从官网下载,因为有80多个,有手点的时间也可以写一个脚本了。。。。
具体过程如下(以单个补丁为例)
1 搜索补丁Local $search = "http://www.microsoft.com/zh-cn/download/search.aspx?q=KB2425227"
Local $oie = _IECreate($search)
Local $fullpage = _IEBodyReadHTML($oIE)在得到页面中要提取出以下部分
我想找的是下载链接 比如 32位的是 http://www.microsoft.com/zh-cn/download/details.aspx?id=5717
也就是说找出 <A
href="http://www.microsoft.com/zh-cn/download/details.aspx?id=5717"
bi:index="0" bi:title="item">Windows 7 安全更新程序 (<B>KB2425227</B>)</A> 然后提取出链接 http://www.microsoft.com/zh-cn/download/details.aspx?id=5717
下面是网页的部分html,全部的太多了......
<DIV class=caption>安全修补程序</DIV></TD>
<TD bi:titleflag="item"><DIV class=link><A
href="http://www.microsoft.com/zh-cn/download/details.aspx?id=5717"
bi:index="0" bi:title="item">Windows 7 安全更新程序 (<B>KB2425227</B>)</A></DIV>
<DIV class=description>现已确认有一个安全问题,攻击者可能会利用此问题曲解用户所不知道的系统操作或行为。</DIV></TD>
<TD><DIV class=price>免费</DIV>
<DIV class=info> 发行日期: 2011/2/7</DIV></TD>
</TR>
<TR>
2 进入相关页面,
找到<A class=download
href="http://www.microsoft.com/zh-cn/download/confirmation.aspx?id=5717"
bi:track="false" bi:displaylang="zh-cn"
bi:fileurl="http://download.microsoft.com/download/4/4/7/4475536D-1157-48A4-BBFC-12DF75BB8DAA/Windows6.1-KB2425227-x86.msu"><SPAN>下载</SPAN></A>
http://download.microsoft.com/download/4/4/7/4475536D-1157-48A4-BBFC-12DF75BB8DAA/Windows6.1-KB2425227-x86.msu这就是下载链接
3 调用迅雷或ie下载
这个应该会用到正则吧?我刚看了一遍30分钟入门,还一头雾水,问题描述不太清楚.....希望有人能帮一下,谢谢。 InetGet ( "http://www.microsoft.com/zh-cn/download/search.aspx?q=KB2425227", @TempDir&"/winxyz", 1)
$file = FileOpen(@TempDir&"/winxyz", 16)
$fullpage = FileRead($file)
FileClose($file)
FileDelete($file)
$id = StringRegExp ( BinaryToString($fullpage, 4), '<div class="link"><a href="/zh-cn/download/details\.aspx\?id=(\d*?)"' , 3 )
For $i = 0 To UBound($id)-1
MsgBox(64, "url"&$i, "http://www.microsoft.com/zh-cn/download/details.aspx?id="&$id[$i])
Next 回复 2# ajian55
谢谢,这个很好用。但是我还有几个问题....
1 为什么这样就提取不到?
多加一点
$id = StringRegExp ( BinaryToString($fullpage, 4), '<div class="link"><a href="www\.microsoft\.com/zh-cn/download/details\.aspx\?id=(\d*?)"' , 3 )
删掉一点
$id = StringRegExp ( BinaryToString($fullpage, 4), '<div class="link"><a href="/download/details\.aspx\?id=(\d*?)"' , 3 )
都不行
2 stringregexp返回的是什么,是括号里的么?
3如果我想提取<DIV class=link><A
href="http://www.microsoft.com/zh-cn/download/details.aspx?id=5717"
bi:index="0" bi:title="item">Windows 7 安全更新程序 (<B>KB2425227</B>)</A></DIV>
div标签里的所有内容,这样为什么没返回值(是不是正则就写错了?)
$div = StringRegExp ( BinaryToString($fullpage, 4),'<div class="link">(.*?)</div>', 3 )
谢谢。 不懂帮你顶 谢谢,这个问题解决了#Include <Array.au3>
InetGet ( "http://www.microsoft.com/zh-cn/download/search.aspx?q=KB2425227", @TempDir&"/winxyz", 1)
$file = FileOpen(@TempDir&"/winxyz", 16)
$fullpage = FileRead($file)
FileClose($file)
FileDelete($file)
$id = StringRegExp ( BinaryToString($fullpage, 4), '<div class="link">[\s\S]*?</div>' , 3 )
_ArrayDisplay($id)这样就可以提取出class 是 link标签中的内容 然后再看里面有没有 x64 emmabed这类词,就可以把补丁分类,然后下一个界面就简单多了。
关键是[\s\S]可以匹配所有字符!!!
然后下面是我解决了的自己的问题
1 返回值是什么,如果没有小括号,返回的就是找到的全部内容,储存在数组里(似乎可以自己指定,我不会...)
比如上一个返回的就是<div class="link"><a href="/zh-cn/download/details.aspx?id=5717" bi:index="0" bi:title="item">Windows 7 安全更新程序 (<b>KB2425227</b>)</a></div>
如果加了小括号$id = StringRegExp ( BinaryToString($fullpage, 4), '<div class="link">([\s\S]*?)</div>' , 3 )
返回的就是<a href="/zh-cn/download/details.aspx?id=5717" bi:index="0" bi:title="item">Windows 7 安全更新程序 (<b>KB2425227</b>)</a>
感谢论坛里的正则学习笔记....谢谢!{:face (427):} 楼主程序做出来共享一下嘛
页:
[1]