找回密码
 加入
搜索
查看: 12289|回复: 28

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

 火.. [复制链接]
发表于 2012-7-30 10:53:08 | 显示全部楼层 |阅读模式
本帖最后由 星云散落 于 2012-7-30 16:56 编辑

网页链接:http://www.orlydb.com/

需要提取的数据

本帖子中包含更多资源

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

×
发表于 2012-7-30 11:29:43 | 显示全部楼层
这种请教,我很想帮忙,但是工作量有点大,楼主求代码呢吗,呵呵
发表于 2012-7-30 12:06:46 | 显示全部楼层
回复 1# 星云散落


    写进EXCEL就可以了啊。
 楼主| 发表于 2012-7-30 12:14:32 | 显示全部楼层
本帖最后由 星云散落 于 2012-7-30 12:19 编辑
这种请教,我很想帮忙,但是工作量有点大,楼主求代码呢吗,呵呵
wsfda 发表于 2012-7-30 11:29



    前辈能否给个简单的例子参考下 我好举一反三 这里应该要用正则吧 这部分实在不太懂 怎样才能把网页上的5段数据用正则分别提取出来呢
发表于 2012-7-30 12:45:10 | 显示全部楼层
回复 4# 星云散落


    不需要用正则啊。对于这种指定网页的数据读取不需要正则表达式的。
你用inget把源文件读下来,再读取数据就可以了啊。
 楼主| 发表于 2012-7-30 13:20:37 | 显示全部楼层
本帖最后由 星云散落 于 2012-7-30 13:24 编辑
回复  星云散落


    不需要用正则啊。对于这种指定网页的数据读取不需要正则表达式的。
你用inget把 ...
甜茶少年 发表于 2012-7-30 12:45

style="BORDER-BOTTOM: #e0e0e0 2px solid; BORDER-LEFT: #e0e0e0 2px solid; PADDING-BOTTOM: 10px; MARGIN-TOP: 20px; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; DISPLAY: inline-block; BACKGROUND: #f5f5f5; MARGIN-LEFT: 20px; FONT-SIZE: 20px; BORDER-TOP: #e0e0e0 2px solid; BORDER-RIGHT: #e0e0e0 2px solid; PADDING-TOP: 10px"
href="http://www2.filedroid.net/AF_TA/rel/index.cfm?TAD=426567">World´s safest
download option! Anonymous Downloads &amp; Identity Protection!</A>
<DIV id=releases>
<DIV><SPAN class=timestamp>2012-07-30 05:14:13</SPAN> <SPAN class=section><A
href="http://www.orlydb.com/s/xxx">XXX</A></SPAN> <SPAN
class=release>MySistersHotFriend.12.07.30.Rikki.Six.XXX.1080p.MP4-KTR</SPAN> <A
class=dlright
href="http://www.orlydb.com/dl/MySistersHotFriend.12.07.30.Rikki.Six.XXX.1080p.MP4-KTR/"><SPAN
class=dl>DL</SPAN></A> <SPAN class=inforight><SPAN class=info>937.0MB |
19F</SPAN></SPAN> </DIV>
<DIV><SPAN class=timestamp>2012-07-30 05:12:40</SPAN> <SPAN class=section><A
href="http://www.orlydb.com/s/tv-x264">TV-x264</A></SPAN> <SPAN
class=release>Insane.Coaster.Wars.S01E05.Extreme.Heights.HDTV.x264-OMiCRON</SPAN>
<A class=dlright
href="http://www.orlydb.com/dl/Insane.Coaster.Wars.S01E05.Extreme.Heights.HDTV.x264-OMiCRON/"><SPAN
class=dl>DL</SPAN></A> <SPAN class=inforight><SPAN class=info>264.0MB |
271F</SPAN></SPAN> </DIV>
<DIV><SPAN class=timestamp>2012-07-30 05:11:23</SPAN> <SPAN class=section><A
href="http://www.orlydb.com/s/xxx">XXX</A></SPAN> <SPAN
class=release>ATKGalleria.12.07.30.Ann.Marie.La.Sante.Masturbation.XXX.1080p.MP4-KTR</SPAN>
<A class=dlright
href="http://www.orlydb.com/dl/ATKGalleria.12.07.30.Ann.Marie.La.Sante.Masturbation.XXX.1080p.MP4-KTR/"><SPAN
class=dl>DL</SPAN></A> <SPAN class=inforight><SPAN class=info>1005.0MB |
24F</SPAN></SPAN> </DIV>


源文件直接读下来是这样的 我要问的问题其实就是怎么把一段段的"<DIV>数据</DIV>“之内的东西都放入一个一维数组 再把每一段的”<DIV>数据</DIV>“之间的一段段"<SPAN class=数据</SPAN>"放入二维数组里

网页上的每一行组成一维数组

每一行中的一个个数据组成二维数组 比如:
时间:2012-07-30 05:12:40
分类:TV-x264
名称:Insane.Coaster.Wars.S01E05.Extreme.Heights.HDTV.x264-OMiCRON
大小:264.0MB
数目:271F


不需要用正则吗 那直接怎么读取和写入呢
发表于 2012-7-30 13:48:08 | 显示全部楼层
回复 6# 星云散落


    我搞定把源代码给你,给我一分钟
发表于 2012-7-30 13:59:02 | 显示全部楼层
本帖最后由 甜茶少年 于 2012-7-30 14:26 编辑

回复 6# 星云散落
#include <File.au3>
#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
Local $IntArray[5][50],$TemArray
$IntArray[0][0]="时间"
$IntArray[1][0]="分类"
$IntArray[2][0]="名称"
$IntArray[3][0]="大小"
$IntArray[4][0]="数目"
$File=FileOpen("orlydb.html")

;每次读取一行文本,直到文件结束.
Do
        
    Local $line = FileReadLine($File,$N)
    If @error = -1 Then ExitLoop
        ;去除空格
        $line=StringStripWS($line,1)
    $line=StringStripWS($line,2) 
    $I=StringInStr($line,">")
    $line=StringTrimLeft($line,$I)
    $I=StringInStr($line,"<","",-1)
    $I=StringLen($line)-$I+1
        $line=StringTrimRight($line,$I)
        $T=Mod($N-131,11)
        Select  
                Case $T=1
                        $M=$M+1
                Case $T=2
                        $IntArray[0][$M]=$line         
                Case $T=3
                        $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 $T=4
                        $IntArray[2][$M]=$line
                Case $T=7
                        $I=StringInStr($line,">")
                        $line=StringTrimLeft($line,$I)
                        $I=StringInStr($line,"<","",-1)
                        $I=StringLen($line)-$I+1
                        $line=StringTrimRight($line,$I)
                        $TemArray=StringSplit($line,"|",2)
                        $IntArray[3][$M]=StringStripWS($TemArray[0],2)
                        $IntArray[4][$M]=StringStripWS($TemArray[1],1)
                
        EndSelect
        
        $N=$N+1
    
Until $N=668
FileClose($File)
额,十分钟,我大意了
 楼主| 发表于 2012-7-30 14:07:05 | 显示全部楼层
本帖最后由 星云散落 于 2012-7-30 14:09 编辑
回复  星云散落 额,十分钟,我大意了
甜茶少年 发表于 2012-7-30 13:59



    非常感谢! 不过代码保存下来编译之后说错误的数组或者数组超过界限……
发表于 2012-7-30 14:17:40 | 显示全部楼层
回复 9# 星云散落


    的确有点错误,首先,我有点眼花
这个是11组一个循环,我愣是数成了10.
你需要改成($M-131,11)
发表于 2012-7-30 14:33:02 | 显示全部楼层
#include <File.au3>
#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
Local $IntArray[5][50],$TemArray
$IntArray[0][0]="时间"
$IntArray[1][0]="分类"
$IntArray[2][0]="名称"
$IntArray[3][0]="大小"
$IntArray[4][0]="数目"
$File=FileOpen("orlydb.html")

;每次读取一行文本,直到文件结束.
Do
        
    Local $line = FileReadLine($File,$N)
    If @error = -1 Then ExitLoop
        ;去除空格
        $line=StringStripWS($line,1)
    $line=StringStripWS($line,2) 
    $I=StringInStr($line,">")
    $line=StringTrimLeft($line,$I)
    $I=StringInStr($line,"<","",-1)
    $I=StringLen($line)-$I+1
        $line=StringTrimRight($line,$I)
        $T=Mod($N-131,10)
        Select  
                Case $T=1
                        $M=$M+1
                Case $T=2
                        $IntArray[0][$M]=$line         
                Case $T=3
                        $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 $T=4
                        $IntArray[2][$M]=$line
                Case $T=7
                        $I=StringInStr($line,">")
            $line=StringTrimLeft($line,$I)
            $I=StringInStr($line,"<","",-1)
            $I=StringLen($line)-$I+1
                $line=StringTrimRight($line,$I)
                        $TemArray=StringSplit($line,"|",1)
                        $IntArray[3][$M]=$TemArray[1]
                        $IntArray[4][$M]=$TemArray[2]
                
        EndSelect
        
        $N=$N+1
    
Until $N=668
FileClose($File)
修正后的代码如上。
 楼主| 发表于 2012-7-30 15:13:10 | 显示全部楼层
本帖最后由 星云散落 于 2012-7-30 15:16 编辑
修正后的代码如上。
甜茶少年 发表于 2012-7-30 14:33



    貌似这段新的编译之后还是说数组超过界限 然后上面第一段代码按您说的修改之后运行是通过了 但是_ArrayDisplay($IntArray) 读不到数据……

本帖子中包含更多资源

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

×
发表于 2012-7-30 15:39:22 | 显示全部楼层
回复 12# 星云散落


    我这边测试正常啊。
发表于 2012-7-30 15:54:35 | 显示全部楼层
回复 12# 星云散落


    经过仔细测试,发现数据只能读到2012-07-30 05:51:50这个时间点。
因为这个时间点缺少大小和下载次数这两个数据,程序出错。但是之前的数据都能正常读取。
 楼主| 发表于 2012-7-30 15:54:50 | 显示全部楼层
回复  星云散落


    我这边测试正常啊。
甜茶少年 发表于 2012-7-30 15:39


又去试了下 11楼这段新代码 我用3.3.7.2/3.3.9.4/3.3.9.5三个版本编译之后运行都是弹这个错误……

本帖子中包含更多资源

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

×
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-16 22:47 , Processed in 0.084111 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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