找回密码
 加入
搜索
楼主: 星云散落

[IE类操作] [已解决]如何将网页上的数据写入数组

 火.. [复制链接]
发表于 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[5][55],$TemArray,$DataType
$IntArray[0][0]="时间"
$IntArray[1][0]="分类"
$IntArray[2][0]="名称"
$IntArray[3][0]="大小"
$IntArray[4][0]="数目"
$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[0][$M]&"|"&$IntArray[1][$M]&"|"&$IntArray[2][$M]&"|"&$IntArray[3][$M]&"|"&$IntArray[4][$M])
                        $M=$M+1
                        $IntArray[0][$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[1][$M]=$line
                        
                Case $DataType="release"
                        $IntArray[2][$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[0]=2 Then 
                                
                          $IntArray[3][$M]=$TemArray[1]
                          
                          $IntArray[4][$M]=$TemArray[2]
                         
                    Else
                          $IntArray[3][$M]=""
                          $IntArray[4][$M]=""
                        EndIf
                        
                
        EndSelect
        
        $N=$N+1
    
Until $N=672
FileClose($File)
FileClose($File2)
我这边,数据是写入文本文档的,你自己可以根据需要自己改。
 楼主| 发表于 2012-7-30 16:23:29 | 显示全部楼层
我这边,数据是写入文本文档的,你自己可以根据需要自己改。
甜茶少年 发表于 2012-7-30 16:20



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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2012-7-30 16:29:25 | 显示全部楼层
回复 18# 星云散落

那我再看看。
发表于 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[0]=2 Then 
                        $IntArray[3][$M]=$TemArray[1]
                         
                        $IntArray[4][$M]=$TemArray[2]
                         
                        EndIf
你改成这样试试看。

评分

参与人数 1威望 +5 金钱 +200 贡献 +20 收起 理由
afan + 5 + 200 + 20 注册以来一直很热心,补上小小的奖励 ^ ^

查看全部评分

 楼主| 发表于 2012-7-30 16:55:55 | 显示全部楼层
回复  星云散落 你改成这样试试看。
甜茶少年 发表于 2012-7-30 16:52



    OK了 再次感谢大神!
发表于 2012-7-30 17:25:36 | 显示全部楼层
回复 21# 星云散落


    不客气
发表于 2012-7-30 19:36:21 | 显示全部楼层
#include <INet.au3>
#include <Array.au3>
#include <String.au3>

Local $Max_Page = 5, $List = 1, $aData[2][4] = [['时间', '类型', '名称', '大小']]

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[0], '<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[1]
                $aData[$List][0] = $time[0]
                $aData[$List][1] = $section[0]
                $aData[$List][2] = $release[0]
                $aData[$List][3] = $info[0]
                $List += 1
                ReDim $aData[$List + 1][4]
        Next
Next

_ArrayDisplay($aData)
发表于 2012-7-30 19:45:47 | 显示全部楼层

评分

参与人数 1金钱 -20 收起 理由
afan -20

查看全部评分

发表于 2012-7-31 08:45:44 | 显示全部楼层
感觉用xml或者josn会好些
发表于 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[1][5] = [["时间", "分类", "名称", "大小", "数目"]]
        $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[UBound($outtext) / 5 + 1][5]
        For $ii = 0 To UBound($outtext) - 1 Step 5
                $outarray[Floor($ii / 5) + 1][0] = $outtext[$ii]
                $outarray[Floor($ii / 5) + 1][1] = $outtext[$ii + 1]
                $outarray[Floor($ii / 5) + 1][2] = $outtext[$ii + 2]
                $outarray[Floor($ii / 5) + 1][3] = $outtext[$ii + 3]
                $outarray[Floor($ii / 5) + 1][4] = $outtext[$ii + 4]
        Next
        Return $outarray
EndFunc   ;==>work
发表于 2012-7-31 22:09:29 | 显示全部楼层
回复 8# 甜茶少年


    牛b
发表于 2012-8-6 12:02:10 | 显示全部楼层
太牛了,一分钟就能写这么多代码
发表于 2015-9-17 15:13:34 | 显示全部楼层
L楼主好福气,看当年的高手们何等风格!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-27 01:53 , Processed in 0.071095 second(s), 15 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表