甜茶少年 发表于 2012-7-30 15:56:22

回复 12# 星云散落


    我再换一种算法。

甜茶少年 发表于 2012-7-30 16:20:11

#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:23:29

我这边,数据是写入文本文档的,你自己可以根据需要自己改。
甜茶少年 发表于 2012-7-30 16:20 http://www.autoitx.com/images/common/back.gif


    这次可以运行了 非常感谢前辈的帮助 唯一的缺陷就是数目和大小不能显示……

甜茶少年 发表于 2012-7-30 16:29:25

回复 18# 星云散落

{:face (113):}那我再看看。

甜茶少年 发表于 2012-7-30 16:52:38

回复 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:55:55

回复星云散落 你改成这样试试看。
甜茶少年 发表于 2012-7-30 16:52 http://www.autoitx.com/images/common/back.gif


    OK了 再次感谢大神!

甜茶少年 发表于 2012-7-30 17:25:36

回复 21# 星云散落


    不客气

athland5013 发表于 2012-7-30 19:36: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)

stanlyjin 发表于 2012-7-30 19:45:47

{:face (356):}

jiankeqcaf 发表于 2012-7-31 08:45:44

感觉用xml或者josn会好些

shenrenba 发表于 2012-7-31 11:37:23

本帖最后由 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

igita 发表于 2012-7-31 22:09:29

回复 8# 甜茶少年


    牛b

tianx 发表于 2012-8-6 12:02:10

太牛了,一分钟就能写这么多代码

yufei8051 发表于 2015-9-17 15:13:34

L楼主好福气,看当年的高手们何等风格!
页: 1 [2]
查看完整版本: [已解决]如何将网页上的数据写入数组