我再换一种算法。 #Include <Array.au3>
Local $hDownload = InetGet("http://www.orlydb.com/", @ScriptDir& "\orlydb.html", 1, 1)
Do
Sleep(250)
Until InetGetInfo($hDownload, 2) ; 检查下载是否完成.
MsgBox(0,"","finsh")
InetClose($hDownload) ; 关闭句柄,释放资源.
Local $File,$N=131,$M=0,$I,$T,$File2
Local $IntArray,$TemArray,$DataType
$IntArray="时间"
$IntArray="分类"
$IntArray="名称"
$IntArray="大小"
$IntArray="数目"
$File=FileOpen("orlydb.html")
$File2=FileOpen("DATA.txt",1)
If FileExists($File2) Then
FileDelete($File2)
EndIf
;每次读取一行文本,直到文件结束.
Do
Local $line = FileReadLine($File,$N)
$line=StringStripWS($line,1)
$line=StringStripWS($line,2)
;去除空格
If $line<>"" Then
$DataType=StringMid($line,StringInStr($line,'"')+1,StringInStr($line,'"',"",2)-StringInStr($line,'"',"",1)-1)
EndIf
$I=StringInStr($line,">")
$line=StringTrimLeft($line,$I)
$I=StringInStr($line,"<","",-1)
$I=StringLen($line)-$I+1
$line=StringTrimRight($line,$I)
Select
Case $DataType="timestamp"
FileWriteLine($File2,$IntArray[$M]&"|"&$IntArray[$M]&"|"&$IntArray[$M]&"|"&$IntArray[$M]&"|"&$IntArray[$M])
$M=$M+1
$IntArray[$M]=$line
Case $DataType="section"
$I=StringInStr($line,">")
$line=StringTrimLeft($line,$I)
$I=StringInStr($line,"<","",-1)
$I=StringLen($line)-$I+1
$line=StringTrimRight($line,$I)
$IntArray[$M]=$line
Case $DataType="release"
$IntArray[$M]=$line
Case $DataType="inforight"
$I=StringInStr($line,">")
$line=StringTrimLeft($line,$I)
$I=StringInStr($line,"<","",-1)
$I=StringLen($line)-$I+1
$line=StringTrimRight($line,$I)
$TemArray=StringSplit($line,"|",1)
If $TemArray=2 Then
$IntArray[$M]=$TemArray
$IntArray[$M]=$TemArray
Else
$IntArray[$M]=""
$IntArray[$M]=""
EndIf
EndSelect
$N=$N+1
Until $N=672
FileClose($File)
FileClose($File2)我这边,数据是写入文本文档的,你自己可以根据需要自己改。 我这边,数据是写入文本文档的,你自己可以根据需要自己改。
甜茶少年 发表于 2012-7-30 16:20 http://www.autoitx.com/images/common/back.gif
这次可以运行了 非常感谢前辈的帮助 唯一的缺陷就是数目和大小不能显示……
回复 18# 星云散落
{:face (113):}那我再看看。 回复 18# 星云散落
Case $DataType="inforight"
$I=StringInStr($line,">")
$line=StringTrimLeft($line,$I)
$I=StringInStr($line,"<","",-1)
$I=StringLen($line)-$I+1
$line=StringTrimRight($line,$I)
$TemArray=StringSplit($line,"|",1)
If $TemArray=2 Then
$IntArray[$M]=$TemArray
$IntArray[$M]=$TemArray
EndIf
你改成这样试试看。 回复星云散落 你改成这样试试看。
甜茶少年 发表于 2012-7-30 16:52 http://www.autoitx.com/images/common/back.gif
OK了 再次感谢大神! 回复 21# 星云散落
不客气 #include <INet.au3>
#include <Array.au3>
#include <String.au3>
Local $Max_Page = 5, $List = 1, $aData = [['时间', '类型', '名称', '大小']]
For $page = 1 To $Max_Page
$str = _INetGetSource('http://www.orlydb.com/' & $page)
$str = _StringBetween($str, '<div id="releases">', '<div id="pager">')
If Not IsArray($str) Then ExitLoop
$str = _StringBetween($str, '<div>', '</div>')
For $NewStr In $str
$time = _StringBetween($NewStr, '<span class="timestamp">', '</span>')
$section = _StringBetween($NewStr, '<span class="section"><a href="/s/', '">')
$release = _StringBetween($NewStr, '<span class="release">', '</span>')
$info = _StringBetween($NewStr, '<span class="info">', '</span>')
If Not IsArray($info) Then Local $info
$aData[$List] = $time
$aData[$List] = $section
$aData[$List] = $release
$aData[$List] = $info
$List += 1
ReDim $aData[$List + 1]
Next
Next
_ArrayDisplay($aData)
{:face (356):} 感觉用xml或者josn会好些 本帖最后由 shenrenba 于 2012-7-31 11:38 编辑
回复 20# 甜茶少年
我用的正则试了下和你的时间差不多
#include <INet.au3>
#include <Array.au3>
Local $text, $url = "http://www.orlydb.com/"
Global $time = TimerInit()
$text = work()
_ArrayDisplay($text, TimerDiff($time))
Func work()
Local $source, $SRE, $outtext, $i = 0
Local $outarray = [["时间", "分类", "名称", "大小", "数目"]]
$source = _INetGetSource($url)
$SRE = StringRegExp($source, '[^>]+(?=(?:</a>)*</span>)', 3)
If @error Then Return
While 1
If $SRE[$i] = "DL" Then
If StringRegExp($SRE[$i + 1], "\|") Then
$outtext &= "|" & $SRE[$i + 1]
$i += 1
Else
$outtext &= "| " & "| "
EndIf
ElseIf StringRegExp($SRE[$i], "not.allowed") Then
Else
$outtext &= "|" & $SRE[$i]
EndIf
$i += 1
If $i >= UBound($SRE) Then ExitLoop
WEnd
$outtext = StringRegExp(StringTrimLeft($outtext, 1), "[^|]+", 3)
ReDim $outarray
For $ii = 0 To UBound($outtext) - 1 Step 5
$outarray = $outtext[$ii]
$outarray = $outtext[$ii + 1]
$outarray = $outtext[$ii + 2]
$outarray = $outtext[$ii + 3]
$outarray = $outtext[$ii + 4]
Next
Return $outarray
EndFunc ;==>work 回复 8# 甜茶少年
牛b 太牛了,一分钟就能写这么多代码 L楼主好福气,看当年的高手们何等风格!
页:
1
[2]