asp蜘蛛程序

    技术2022-05-13  6

    <%'//这个程序运行成功了,但一些函数没写好,包括去除脚本的函数getbody()。其他地方含有很多错误。帮我把*后面的中文翻译成计算机语句,然后修改一下不好的地方。

    Dim Url,Html,i

    set conn=server.CreateObject("adodb.connection")conn.ConnectionString = "driver={Microsoft Access Driver (*.mdb)};" & "DBQ=" & "C:/Inetpub/wwwroot/1/wo.mdb"'//用的access数据库wo.mdb,包括tnet表,表中包含字段:网址编号netid,网址link,对应的网页标题title,可显示文本body,包含的链接数nlink.conn.openset rs=Server.CreateObject("ADODB.recordset")set rs.activeconnection=connrs.cursortype=3

    call start()  '//开始函数

    sub start()

    set rs=Server.CreateObject("ADODB.recordset")set rs.activeconnection=connrs.cursortype=3

    i=1do while i<3      '//一次运行三个,可设定

    '****  if 运行时间已经快到脚本运行时间限制,then'*****  response.redirect(http://......88.asp)   跳转到另一个页面'*****  结束本次运行。'****  end if'//上面的是实现自动化,在页面运行快超时时,结束本次运行,重新第二次执行,本文件的名称是88.asp。vb应该需要这个。

    set rs=Server.CreateObject("ADODB.recordset")set rs.activeconnection=connrs.cursortype=3

    sql="select top 1 link,netid from tnet where closed<>4 order by netid"   '//查出第一条closed<>4的记录,4代表访问过rs.open sql

    url=rs("link")id=rs("netid")

    Response.write "<br><br>第"&i&"个网址"&url&"的链接数是     "

    Html = getHTTPPage(Url)Response.write htmltitle=gettitle(html)body1=getbody(html)nlink=getlink(Html,url)call setclosed(title,body1,nlink)  '//把访问过的网址的colsed的值改为4,并添加标题和文本内容。set rs=nothingi=i+1loop

    end sub

     

    sub delete() ''//删除不可用的网址,包括网址格式错误,或网页无法访问,但这个函数没有执行,只是链接格式错误时,会报错,然后停止运行;不知为什么。set rs=Server.CreateObject("ADODB.recordset")set rs.activeconnection=connrs.cursortype=3        sql="delete from tnet where tnet=(select top 1 link,netid from tnet where closed<>4 order by netid)"         rs.open sql           set rs=nothing       call start()  '//重新开始运行end sub

     

    '1、输入url目标网页地址,返回值getHTTPPage是目标网页的html代码function getHTTPPage(url)    dim Http    set Http=server.createobject("MSXML2.XMLHTTP")    Http.open "GET",url,false    Http.send()       if Err.number<>0 then                      '//如果出现网址错误,或网页无法访问就调用delete()函数删除数据库中不可用的网址。但是当网址格式正确,但页面无法访问时,正常执行其他程序,没有执行delete();当格式不正常时,不能执行delete()删除程序,然后报错,说代码有问题,但只要把网址改好就不会说代码错误。这个地方我改不好,帮我改一下。          call delete()                             '//删除不可用的网址,包括网址格式错误,或网页无法访问,但delete() 函数没有执行,只是链接格式错误时,会报错,然后停止运行;但页面无法访问时,正常执行其他程序。不知为什么。       end if     if Http.readystate<>4 then        exit function     end if     getHTTPPage=bytesToBSTR(Http.responseBody,"GB2312")     set http=nothingend function'2、转换乱玛,直接用xmlhttp调用有中文字符的网页得到的将是乱玛,可以通过adodb.stream组件进行转换Function BytesToBstr(body,Cset)        dim objstream        set objstream = Server.CreateObject("adodb.stream")        objstream.Type = 1        objstream.Mode =3        objstream.Open        objstream.Write body        objstream.Position = 0        objstream.Type = 2        objstream.Charset = Cset        BytesToBstr = objstream.ReadText        objstream.Close        set objstream = nothingEnd Function

     

     

     

    function setclosed(title,body,nlink)     '//把访问过的网址的colsed的值改为4,并添加标题和文本内容。当页面无法访问时,也会修改closed值,但网址格式错误时本应被调用,但实际没有调用。set rs=Server.CreateObject("ADODB.recordset")set rs.activeconnection=connrs.cursortype=3title=titlebody=bodynlink=nlinksql="update tnet set closed=4 ,title='"&title&"',body='"&body&"',nlink='"&nlink&"'  where netid=(select top 1 netid from tnet where closed=1 order by netid)"rs.open sqlset rs=nothingend function

     

     

     

    function gettitle(html)  ''//获得网页标题函数    dim tpos1,tpos2,len    html=lcase(html)     tpos1=instr(html,"<title>")+7     tpos2=instr(html,"</title>")     len=tpos2-tpos1     gettitle=mid(html,tpos1,len)     response.write gettitle    '//测试用end function

     

     

     

    function httptou(url)  '//处理本地链接,提取本地链接前所需的字符串:http://...   dim a   a=len(url)-instr(strreverse(url),"/")+1   httptou=left(url,a)  end function

     

    function getbody(body)      '//获得页面的显示文本,还没写好,测试用  ****,帮我写一下,我写的错误很多    getbody=left(body,20)    response.write getbodyend function

    function getlink(html,url)   '//提取链接插入数据库,返回页面链接数     dim pos1,pos2,pos3,pos4,ab,getlinka     j=1 Do  while  instr(html,"href=")>0

       

         pos1=instr(html,"href=")+6   '网址的第一个字的位置

         html=mid(html,pos1)

         pos2=instr(html,"""")-1   '网址的最后一个字符

         link=left(html,pos2)    

           if left(link,7)<>"http://" then       link=httptou(url)&link  '调用函数httptou(url)       end if

         sqllink="insert into tnet(link,closed) select '"&link&"',1"     '//closed字段判断网址是否访问过,1表示没有访问过,4表示访问过     conn.execute(sqllink)          j=j+1loop

          response.write j    getlink=j    '//返回包含链接数end function

     

     

     

    %>

    <%response.write("插入成功,")

    conn.closeif conn.state=0 thenresponse.write("任务完成,已经断开数据库")end ifset conn=nothing%>


    最新回复(0)