当前位置: 首页 > 图文教程 > 网络编程 > ASP > 写了段批量抓取某个列表页的东东

ASP
在ASP中使用SQL语句之10:视图
在ASP中使用SQL语句之11:记录统计
VBS、ASP代码语法加亮显示的类(2)
asp作品保护方案
使用NextRecordset通过一个Connection输出多个select查询
超长字符的智能分页-支持HTML
远程获取内容,并将内容存在本地电脑上,包括任何文件
把文件存进access数据库然后取出来供人下载的代码
一个分页存储过程
在asp文件中访问flash详细信息
关于生成目录树结构的类
用自定义函数获取汉字的首字母
asp在SQL SER2k中新建帐号和给帐号权限的实现
不用 EOF 以加快记录循环
js的单元格颜色间隔
根据选择的Checkbox动态在表格中列出选择的值
URL欺骗
汉字转化为拼音
一个不需要第三方组件,可实现华简单图形的类
组合查询之核心:拼接字符串

ASP 中的 写了段批量抓取某个列表页的东东


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-12   浏览: 109 ::
收藏到网摘: n/a

有些人当抓取程序是个宝,到目前还TND有人在卖钱,强烈BS一下这些家伙 真是的!可能偶下边这段东西比较烂哈
下边这个没有写入库功能,已经到这一步了,入库功能是很简单的事了,需要的请自己去完成吧,其它功能各位自行完善吧!把代码拷贝过去直接运行即可看到效果
Dim Url,List_PageCode,Array_ArticleID,i,ArticleID
Dim Content_PageCode,Content_TempCode
Dim Content_CategoryID,Content_CategoryName,BorderID,ClassID,BorderName,ClassName
Dim ArticleTitle,ArticleAuthor,ArticleFrom,ArticleContent
Url = "http://www.webasp.net/article/class/1.htm"
List_PageCode = getHTTPPage(Url)
List_PageCode = RegExpText(List_PageCode,"打印</th></tr>","</table><table border=0 cellpadding=5",0)
List_PageCode = RegExpText(List_PageCode,"<td align=left><a href='../","'><img border=0 src='/upload/tech/20091012/20091012011632_8df707a948fac1b4a0f97aa554886ec8.gif'",1) '取得当前列表页的文章链接,以,分隔
Array_ArticleID = Split(List_PageCode,",") '创建数组,存储文章ID
For i=0 To Ubound(Array_ArticleID)-1
ArticleID = Array_ArticleID(i) '文章ID
Content_PageCode = getHTTPPage("http://www.webasp.net/article/"&ArticleID) '取得文章页的内容
'=========取文章分类及相关ID参数 开始=======================
Content_TempCode = RegExpText(Content_PageCode,"<a href=""/article/"">技术教程</a> >> ",">> 内容</td>",0)
Content_CategoryID = RegExpText(Content_PageCode,"<a href='../class","/'>",1)
BorderID = Split(Content_CategoryID,",")(0) '大类ID
ClassID = Split(Content_CategoryID,",")(1) '子类ID
'==========检查大类是否存在 开始===============
'如果不存在则入库
'==========检查大类是否存在 结束===============
'Response.Write(BorderID & "," & ClassID & "<br />")
Content_CategoryName = RegExpText(Content_PageCode,"/'>","</a>",1)
BorderName = Split(Content_CategoryName,",")(0) '大类名称
ClassName = Split(Content_CategoryName,",")(1) '子类名称
'==========检查子类是否存在 开始===============
'如果不存在则入库
'==========检查子类是否存在 结束===============
'=========取文章分类及相关ID参数 结束=======================
'=========取文章标题及内容 开始=============================

ArticleTitle = RegExpText(Content_PageCode,"<tr><td align=center bgcolor=#DEE2F5><strong>","</strong></td></tr>",0)
ArticleAuthor = RegExpText(Content_PageCode,"<tr><td><span class=blue>作者:</span>","</td></tr>",0)
ArticleFrom = RegExpText(Content_PageCode,"<tr><td><span class=blue>来源:</span>","</td></tr>",0)
ArticleContent = RegExpText(Content_PageCode,"<tr><td class=content style=""WORD-WRAP: break-word"" id=zoom>","</td></tr>"&VBCrlf&" </table>"&VBCrlf&" </td></tr></table>",0)
'=========取文章标题及内容 结束=============================
Response.Write(ArticleTitle& "<br /><br />")
Response.Flush()
Next

附几个函数:
Function getHTTPPage(url)
IF(IsObjInstalled("Microsoft.XMLHTTP") = False)THEN
Response.Write "<br><br>服务器不支持Microsoft.XMLHTTP组件"
Err.Clear
Response.End
END IF
On Error Resume Next
Dim http
SET http=Server.CreateObject("Msxml2.XMLHTTP")
Http.open "GET",url,False
Http.send()
IF(Http.readystate<>4)THEN
Exit Function
END IF
getHTTPPage=BytesToBSTR(Http.responseBody,"GB2312")
SET http=NOTHING
IF(Err.number<>0)THEN
Response.Write "<br><br>获取文件内容出错"
'Response.End
Err.Clear
END IF
End Function

Function BytesToBstr(CodeBody,CodeSet)
Dim objStream
SET objStream = Server.CreateObject("adodb.stream")
objStream.Type = 1
objStream.Mode =3
objStream.Open
objStream.Write CodeBody
objStream.Position = 0
objStream.Type = 2
objStream.Charset = CodeSet
BytesToBstr = objStream.ReadText
objStream.Close
SET objStream = NOTHING
End Function
'================================================
'作 用:检查组件是否已经安装
'返回值:True ----已经安装
' False ----没有安装
'================================================
Function IsObjInstalled(objName)
On Error Resume Next
IsObjInstalled = False
Err = 0
Dim testObj
SET testObj = Server.CreateObject(objName)
IF(0 = Err)THEN IsObjInstalled = True
SET testObj = NOTHING
Err = 0
End Function
Function RegExpText(strng,strStart,strEnd,n)
Dim regEx,Match,Matches,RetStr
SET regEx = New RegExp
regEx.Pattern = strStart&"([\s\S]*?)"&strEnd
regEx.IgnoreCase = True
regEx.Global = True
SET Matches = regEx.Execute(strng)
For Each Match in Matches
IF(n=1)THEN
RetStr = RetStr & regEx.Replace(Match.Value,"$1") & ","
ELSE
RetStr = RetStr & regEx.Replace(Match.Value,"$1")
END IF
Next
RegExpText = RetStr
SET regEx=NOTHING
End Function