用asp+xmlhttp编写web采集程序(5)


    Dim sAbsoluteUrl
    For Each RemoteFileUrl in RemoteFile
        '<img src="a.jpg">,<img src="f/a.jpg">,<img src="/ff/a.jpg">
        If Left(RemoteFileUrl.SubMatches(1),1)="/" Then
            sAbsoluteUrl=sHost
        Else
            sAbsoluteUrl=sPath
        End If
        sAbsoluteUrl = RemoteFileUrl.SubMatches(0)&"="""&sAbsoluteUrl&RemoteFileUrl.SubMatches(1)&""""
        sContent=Replace(sContent,RemoteFileUrl,sAbsoluteUrl)
    Next

    DetectUrl=sContent
End Function 
改进:避免重复下载
网页中的有些图片,比如spacer.gif重复出现,会被重复下载,壁免这个问题的一个方法是设置一个arrUrls数组,把采集过的文件的URL放在里面,在每次采集前先遍历数组看是否已经采集,然后只参集没有参集过的文件

3.实战举例(以****为例)
****是我最经常去的地方,而且网速不错,就以她为例啦,没有恶意哦:-)

分析列表页
内容页的技巧
分析内容页中的上一页,下一页
想了一下,这部分内容还是晢时不写,免得被BS了  :-),还省得打好多字。 无非是把远程网页采集下来,然后用正则表达式分析提取其中的特定内容,如标题,作者,内容之类的 我有两个小小的经验: 

一是网页源码前后的内容对分析有很大的干扰,你可以用下面的方法先把它支除
'抽取部分内容进行分析,你可以用用EditPlus数字数
'去除前7600和后5000的字符
sPageW=Left(sPageW,Len(sPageW)-5000)
sPageW=Mid(sPageW,7600)

二是你可能不想在对方的服务器上留下连续的浏览记录,下面的一个小函数会有所帮助
'过程: Sleep
'功能: 程序在此晢停几秒
'参数: iSeconds    要暂停的秒数
Sub Sleep(iSeconds)
    D Timer()&" <font color=blue>Sleep For "&iSeconds&" Seconds</font>"
    Dim t:t=Timer()
    While(Timer()<t+iSeconds)
        'Do Nothing
    Wend
    D Timer()&" <font color=blue>Sleep For "&iSeconds&" Seconds OK</font>"
End Sub

'调用举例,晢停,时长随机,在3秒以内

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/3140.html