自己做采集程序

现在网上的采集程序很多,但是有时候你发现一个好的网站,想自己做个采集工具采集一些信息,就需要自己去写程序了,其实这样的采集程序并不难写,主要是去分析源网站的网页结构。
首先去下载个XMLHTTP的类文件:
<%
Class xhttp
private cset,sUrl,sError
Private Sub Class_Initialize()
'cset="UTF-8"
cset="GB2312"
sError=""
end sub

Private Sub Class_Terminate()
End Sub

Public Property LET URL(theurl)
sUrl=theurl
end property
public property GET BasePath()
BasePath=mid(sUrl,1,InStrRev(sUrl,"/")-1)
end property
public property GET FileName()
FileName=mid(sUrl,InStrRev(sUrl,"/")+1)
end property
public property GET Html()
Html=BytesToBstr(getBody(sUrl))
end property

public property GET xhttpError()
xhttpError=sError
end property

private Function BytesToBstr(body)
on error resume next
'Cset:GB2312 UTF-8
dim objstream
set objstream = Server.CreateObject("adodb.stream")
with objstream
.Type = 1 '
.Mode = 3 '
.Open    
.Write body  '
.Position = 0 '
.Type = 2  '
.Charset = Cset  '
BytesToBstr = .ReadText '
.Close
end with
set objstream = nothing
End Function

private function getBody(surl)
on error resume next
dim xmlHttp
'Set xmlHttp=server.createobject("Msxml2.XMLHTTP.4.0")
'set xmlHttp=server.createobject("Microsoft.XMLHTTP")
set xmlHttp=server.createobject("MSXML2.ServerXMLHTTP")
xmlHttp.setTimeouts 10000,10000,10000,30000
xmlHttp.open "GET",surl,false
xmlHttp.send
if xmlHttp.readystate=4 then
'if xmlHttp.status=200 then
 getBody=xmlhttp.responsebody
'end if
 else
 getBody=""
end if

if Err.Number<>0 then
sError=Err.Number
Err.clear
else
sError=""
end if
set xmlHttp=nothing
end function

Public function saveimage(tofile,isoverwrite)
on error resume next
dim objStream,objFSO,imgs

if Not isoverwrite Then
 Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
 If objFSO.FileExists(Server.MapPath(tofile)) Then
  Exit Function
 End If
 Set objFSO = Nothing
End IF

imgs=getBody(sUrl)
Set objStream = Server.CreateObject("ADODB.Stream")
with objStream
.Type =1
.Open
.write imgs
.SaveToFile server.mappath(tofile),2
.Close()
end with
set objstream=nothing
end function

end class

%>
用了这个类文件,做起事情来就方便多了。
然后就可以分析采集网站的网页结构,写采集程序了。
下面给个例子:
<!--#include file="conn.asp"-->
<!--#include file="inc/xhttp_class.asp"-->
<!--#include file="inc/function.asp"-->
<%
server.ScriptTimeout = 1000
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>BT采集器</title>
</head>
<body>
<form name="form1" method="post" action="get81bt.asp">
分类ID:
  <input type="text" name="cid" value="<%=request("cid")%>"><br>
开始ID:
  <input type="text" name="startid" value="<%=request("startid")%>">
  <br>
  结束ID:
  <input type="text" name="overid" value="<%=request("overid")%>">
  <br>
  分类名称:<input type="text" name="classname" value="<%=request("classname")%>">为空自动获取
  <br>
  <input name="action" type="hidden" id="action" value="getdata">
  <input type="submit" name="Submit" value="采集">
</form>
当前ID:<%=request("id")%> <br>
<%
dim action

action = Request("action")
if action = "getdata" then
        cid = Request("cid")
        startid = Request("startid")
        overid = Request("overid")
        id = Request("id")       
        if id = "" then id = startid

set objxhttp = new xhttp

objxhttp.URL = "http://www.81dd.com/Class/"&cid&"_"&id&".htm"
        content = objxhttp.Html

if InStr(content,"网站维护中") then
                call NextID
                response.End()
        end if

list = GetContent(content,"<!--内容开始-->","<!--内容结束-->",0)

Dim regEx, Match, Matches,patrn
        Set regEx = New RegExp
        patrn = "<a href=""../BtHtml/(.+?)"">"
        regEx.Pattern = patrn
        regEx.IgnoreCase = True
        regEx.Global = True
        Set Matches = regEx.Execute(list)
        on error resume next
        For Each Match in Matches

'response.write Match.Value & "<br>"
                weburl = "http://www.81dd.com/BtHtml/" & regEx.Replace(Match.Value,"$1")
                response.write weburl & "<br>"
                response.Flush()

objxhttp.URL = weburl
                cpage = objxhttp.Html       
                cpage = GetContent(cpage,"<!--内容开始-->","<!--内容结束-->",0)

title = GetContent(cpage,"BT资源名称:<strong>","</strong>",0)
                title = stripHTML(title)

IF Request("classname") <> "" then
                        classname = Request("classname")
                Else               
                        if InStr(title,"喜剧") then
                                classname = "喜剧"
                        Elseif InStr(title,"动作") then
                                classname = "动作"
                        Elseif InStr(title,"惊悚") then
                                classname = "惊悚"
                        Elseif InStr(title,"犯罪") then
                                classname = "犯罪"
                        Elseif InStr(title,"恐怖") then
                                classname = "恐怖"
                        Elseif InStr(title,"爱情") then
                                classname = "爱情"
                        Elseif InStr(title,"冒险") then
                                classname = "冒险"
                        Elseif InStr(title,"科幻") then
                                classname = "科幻"
                        Elseif InStr(title,"悬念") then
                                classname = "悬念"
                        Elseif InStr(title,"奇幻") then
                                classname = "奇幻"
                        Elseif InStr(title,"战争") then
                                classname = "战争"
                        Elseif InStr(title,"连续剧") then
                                classname = "连续剧"
                        Elseif InStr(title,"综艺") then
                                classname = "综艺"
                        Elseif InStr(title,"灾难") then
                                classname = "灾难"
                        Elseif InStr(title,"伦理") then
                                classname = "伦理"
                        Elseif InStr(title,"动漫") or InStr(title,"动画") then
                                classname = "动漫"
                        Elseif InStr(title,"国语") or InStr(title,"集") then
                                classname = "其他影视"
                        Else
                                classname = "其他"
                        End if
                End IF

intro = GetContent(cpage,"<tr><td width=770 bgcolor=#FFFFFF><div style=""margin:10px;line-height:150%"">","</div>",0)
                intro = Replace(intro,"<br />","[br]")
                intro = Replace(intro,"<BR />","[br]")
                intro = Replace(intro,"<BR>","[br]")
                intro = Replace(intro,"<br>","[br]")
                intro = Replace(intro,"<p>","[p]")
                intro = Replace(intro,"<P>","[p]")
                intro = Replace(intro,"</p>","[/p]")
                intro = Replace(intro,"</P>","[p]")
                intro = Replace(intro,"<img","[img")
                intro = Replace(intro,"<IMG","[img")       
                intro = stripHTML(intro)
                intro = Replace(intro,"[br]","<br>")
                intro = Replace(intro,"[p]","<p>")
                intro = Replace(intro,"[/p]","</p>")
                intro = Replace(intro,"[img","<img")
                intro = Replace(intro,"[img]","<img src=")
                intro = Replace(intro,"[/img]",">")
                intro = Replace(intro,"[IMG]","<img src=")
                intro = Replace(intro,"[/IMG]",">")
                'response.write t
                'response.End()

addtime = Trim(GetContent(cpage,"发布时间:"," ",0))
                if Not IsDate(addtime) then addtime = now()

username = "bt"

filesize = GetContent(content,"BT文件大小:"," ",0)

title2 = title

downurl = GetContent(cpage,"<a style=""color:red"" href=""","""",0)

p = CDate(addtime)
                Dim sRnd
                Randomize
                sRnd = Int(900 * Rnd) + 100
                sFileName = year(p) & month(p) & day(p) & hour(now) & minute(now) & second(now) & sRnd & ".torrent"

url = "torrent/" & year(p) & "-" & month(p) & "-" & day(p) & "/" & sFileName
                Call CreateF(url)

'Text
                Response.Write classname & "<br>"
                Response.write title & "<br>"
                'response.Write intro & "<br>"
                'response.Write addtime & "<br>"
                'response.Write username & "<br>"
                'response.Write filesize & "<br>"
                response.Write downurl & "<br>"
                response.Write url & "<br>"
                response.Flush()

'response.End()
                'database

if err.number = 0 then
                        if (Not IsNull(title)) and title <> "" and downurl <> "" then
                                set rs = server.CreateObject("adodb.recordset")
                                sql = "select * from bt_class where classname = '" & classname & "'"
                                rs.open sql,conn,1,3
                                if rs.eof then
                                        rs.addnew
                                        rs("classname") = classname
                                        rs.update
                                end if
                                classid = rs("classid")
                                rs.close
                                set rs = nothing

set rs = server.CreateObject("adodb.recordset")
                                sql = "select * from bt_movie where title in ('" & title & "')"
                                rs.open sql,conn,1,3
                                if rs.eof then
                                        response.Write "<div><font color=blue>写入数据库...</font></div>"
                                        response.Flush()
                                        rs.addnew                       
                                        rs("classid") = classid
                                        rs("title") = title
                                        rs("title2") = title2
                                        rs("intro") = intro
                                        rs("username") = username
                                        rs("filesize") = filesize
                                        rs("url") = url
                                        rs("serverid") = 1
                                        rs("addtime") = addtime
                                        rs("ismake") = 0
                                        rs.update

objxhttp.URL = downurl
                                        objxhttp.saveimage url,False
                                else
                                        response.Write "<div><font color=red>已经存在!</font></div>"
                                end if
                                rs.close
                                set rs = nothing

'objxhttp.URL = downurl
                                'objxhttp.saveimage url,False
                        End IF

Else
                        err.clear
                End IF
                response.Write "-------------------------------------------<br>"
        Next
        set regEx = nothing

response.Write "下一页<br>"
        response.Flush()

Call NextID()

end if

Sub NextID
        conn.close
        set conn = nothing

if cint(startid) < cint(overid) and cint(id) < cint(overid) then
                response.Write "<script>location.href='get81bt.asp?action=getdata&classname=" & Request("classname") & "&cid=" & cid & "&startid=" & startid & "&overid=" & overid & "&id="& id + 1 &"'</script>"
        Elseif cint(startid) > cint(overid) and cint(id) > cint(overid) then
                response.Write "<script>location.href='get81bt.asp?action=getdata&classname=" & Request("classname") & "&cid=" & cid & "&startid=" & startid & "&overid=" & overid & "&id="& id - 1 &"'</script>"
        Else
                Response.Write "采集完成!<br>"
                response.End()
        End if
End Sub

%>

</body>
</html>

(0)

相关推荐

  • 自己做采集程序

    现在网上的采集程序很多,但是有时候你发现一个好的网站,想自己做个采集工具采集一些信息,就需要自己去写程序了,其实这样的采集程序并不难写,主要是去分析源网站的网页结构.首先去下载个XMLHTTP的类文件:<%Class xhttpprivate cset,sUrl,sErrorPrivate Sub Class_Initialize()'cset="UTF-8"cset="GB2312"sError=""end sub Private Sub

  • PHP 采集程序原理分析篇

    苦想了几天,终于弄明白了里面的道理.在这里写出来,请高手指正. 采集程序的思路很简单,无非就是先打一个页面,一般都是列表页,取得里面全部链接的地址,然后打开逐条链接,寻找我们感兴趣的东西,如果找到,就把它入库或别的处理.下面以一个很简单的例子来说说. 首先确定一个采集页,一般就是列表面了.这里目标是:http://www.jb51.net/article/11/index.htm.这是一个列表页,我们的目的就是采集这个列表页上全部的文章. 有列表页了,第一步先打开它,把它的内容纳入到我们的程序中

  • asp 小偷采集程序原理与常用函数方法

    用采集程序的优点有:无须维护网站,因为采集程序中的数据来自其他网站,它将随着该网站的更新而更新:可以节省服务器资源,一般采集程序就几个文件,所有网页内容都是来自其他网站.缺点有: 不稳定,如果目标网站出错,程序也会出错,而且,如果目标网站进行升级维护,那么采集程序也要进行相应修改:速度,因为是远程调用,速度和在本地服务器上读取数据比起来,肯定要慢一些. 一.事例 下面就XMLHTTP在ASP中的应用做个简单说明 复制代码 代码如下: <% '常用函数 '1.输入url目标网页地址,返回值getH

  • asp 采集程序常用函数分析

    原理 采集程序实际上是通过了XML中的XMLHTTP组件调用其它网站上的网页.比如新闻采集程序,很多都是调用了sina的新闻网页,并且对其中的html进行了一些替换,同时对广告也进行了过滤.用采集程序的优点有:无须维护网站,因为采集程序中的数据来自其他网站,它将随着该网站的更新而更新:可以节省服务器资源,一般采集程序就几个文件,所有网页内容都是来自其他网站.缺点有:不稳定,如果目标网站出错,程序也会出错,而且,如果目标网站进行升级维护,那么采集程序也要进行相应修改:速度,因为是远程调用,速度和在

  • 用asp+xmlhttp编写web采集程序

    web采集程序?网页抓取程序?小倫程序?不管怎么叫,这种程序应用倒是蛮广的.本文不讨论这种使用这种程序引起的版权或道德问题,只谈这种程序在ASP+VBScript环境下的实现 :-) 预备知识:除了一般的ASP+VBScript的知识外,你还需要了解xmlhttp对象和正则表达式对象.xmlhttp对象是时下风头正劲的Ajax的主角:而学好了正则表达式,你再也不用为处理复杂的字符串犯愁. 在编写和调试正则表达式时,RegEx 这个小工具非常有用. 目录 抓取一个远程网页并保存到本地  改进:处理

  • 用xmlhttp编写web采集程序

    晰带语法着色的版本:http://gwx.showus.net/blog/article.asp?id=229 原创很辛苦,转载请注明原文链接:http://gwx.showus.net/blog/article.asp?id=229 web采集程序?网页抓取程序?小倫程序?不管怎么叫,这种程序应用倒是蛮广的.本文不讨论这种使用这种程序引起的版权或道德问题,只谈这种程序在ASP+VBScript环境下的实现 :-) 预备知识:除了一般的ASP+VBScript的知识外,你还需要了解xmlhttp

  • ASP读取XML实例 优酷专辑采集程序 雷锋版

    复制代码 代码如下: <title>雷锋|优酷-专辑 采集程序</title></head> <form name="form1" method="post" action="?action=add"> <table width="95%" border="0" align="center" cellpadding="0&q

  • 自动采集程序

    最近在做一个音乐站,音乐文件嘛...一般是从网上收集..so..写了一段采集程序.  复制代码 代码如下: <%   On Error Resume Next   Const uploadPath = "/uploads/" '文件存放路径   Const allowFileExt = "jpg,wma,swf,gif" '允许被采集的文件类型   'Const allowFileSize = "200"   Function getFil

  • Java实现一个小说采集程序的简单实例

    被标题吸引进来的不要骂我. 只是一个简单的实现,随手写了来下载一部喜欢的小说的.示例中的小说只是示例,不是我的菜. 使用了jsoup.挺好用的一个工具. 有需要的话,参考下自己改吧.挺简单的,是吧. 代码如下: package com.zhyea.doggie; import java.io.File; import java.io.FileWriter; import java.io.IOException; import org.jsoup.Jsoup; import org.jsoup.n

  • php 论坛采集程序 模拟登陆,抓取页面 实现代码

    复制代码 代码如下: <?php // 吴燕军 // 2009-06-27 // 采集程序php set_time_limit(0); //cookie保存目录 $cookie_jar = '/tmp/cookie.tmp'; /*函数------------------------------------------------------------------------------------------------------------*/ //模拟请求数据 function req

随机推荐