用XMLHTTP对象抓取网页源代码拆分数据写入数据库

涵冷220

涵冷220

2016-02-19 20:03

有一种朋友不在生活里,却在生命力;有一种陪伴不在身边,却在心间。图老师即在大家的生活中又在身边。这么贴心的服务你感受到了吗?话不多说下面就和大家分享用XMLHTTP对象抓取网页源代码拆分数据写入数据库吧。

!--#include file="fget.asp"--
!--#include file="conn.asp"--
html
head
meta http-equiv="Content-Type" content="text/html; charset=gb2312"
titledwww.cn 信息采集/title
/head
body
%
Server.ScriptTimeOut=9999999
PageStart=""'抓取开始页
PageEnd=30'抓取结束页
lburl="http://www.tignet.cn/zhaoshang/index.asp?CurPageNum="'列表第一页开始url
pg=cint(request.querystring("pg"))'取得页数
'=========列表分页处理开始=========================
if PageStart="" and pg=0 then'判断是否为第一页
pg=1'第一页直接抓取
list_url="http://www.tignet.cn/zhaoshang/"
elseif PageStart="" and pg0 then'设置下一页抓取url
list_url=lburl&pg
elseif PageStart"" and pg=0 then
pg=PageStart'设置采集开始页数
list_url=lburl&pg
elseif PageStart"" and pg0 then
list_url=lburl&pg
end if
' response.Write list_url
' response.End()
'=========截取数据开始=============================
'第一步设置数据
lists="发布信息"'列表截取
listo=" 为医药界"
listxs="留言咨询"'循环链接截取
links="a href='"'标题链接
linko="' target='_blank' "
'=================内容加字段=======================
companys="span style='font-size:12px;'"'公司名称
companyo="/span"
names="padding-bottom:3px;'"'药品名称
nameo="/a"
kinds="类别:"'药品类型
kindo="/span"
times="更新时间:"'代理商介绍
timeo="/span"
Response.Write "/br"
Response.Write "centerfont size=3pt=============抓取"&list_url&"信息开始=============/font/center"
'调用主题函数NewsList
Call NewsList()
'调用转向下一页函数
Call EndPage()
Function NewsList()'获取某类列表代码
strHtml=GetHTTPPage(list_url)'获得html代码
strHtml=strCut(strHtml,lists,listo,1)'获取列表代码
' response.Write strHtml
' response.End()
strHtml=split(strHtml,listxs)'拆分代码
' response.Write strHtml(1)
' response.End()
for i=0 to (ubound(strHtml)-1)'拆分标题,链接地址
newsurl="http://www.tignet.cn"&strCut(strHtml(i),links,linko,2)
' response.Write newsurl
' response.End()
'Get_time=FormatStr(Trim(strCut(strHtml(i),times,timeo,2)))'发布时间
' if FormatStr(strCut(strHtml(i),links,linko,2))"" then
' NewsHtml=GetHTTPPage(newsurl)'获取下一步详细内容页面html代码
'' response.Write NewsHtml
'' response.End()
' else

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)' response.Write "抓取第"&i&"条链接地址失败,不能抓取此项详细内容,程序将跳过此项目!"
' end if
'leibie=FormatStr(Trim(strCut(NewsHtml,kinds,kindo,2)))'采集产品类别
leibie=FormatStr(Trim(strCut(strHtml(i),kinds,kindo,2)))
if leibie"" then
company=FormatStr(Trim(strCut(strHtml(i),companys,companyo,2)))'采集公司名称
'ming=replace(FormatStr(Trim(strCut(strHtml(i),names,nameo,2))),"★","")'采集产品名称
ming=FormatStr(Trim(strCut(strHtml(i),names,nameo,2)))'采集产品名称
shijian=replace(FormatStr(Trim(strCut(strHtml(i),times,timeo,2))),"/","-")'发布时间
s1=instr(leibie,"品 ")
s2=len(leibie)
if s10 then
bigkind=mid(leibie,1,s1)
kind=mid(leibie,(s1+1),(s2-s1))
else
bigkind=leibie
kind=""
end if

if newsurl"" then
set rs=server.CreateObject("adodb.recordset")
sql="select url from Get_zhaoshang where url='"&newsurl&"'"
rs.open sql,conn,1,1
if rs.eof then
'插入数据
SQL="insert into Get_zhaoshang(company,names,bigkind,kind,url,times) values('"&company&"','"&ming&"','"&bigkind&"','"&kind&"','"&newsurl&"','"&shijian&"')"
Conn.execute(SQL)
response.write "   font color=Green size=3pt+/font"&newsurl&"br"
else
response.write "   font color=red size=3pt此条信息已经存在,程序将跳过!/fontbr"
end if
end if
end if
Next
set strHtml=nothing
Response.Write "centerfont size=3pt第"&pg&"页信息抓取结束!!!/font/center"
End Function

Function GetHTTPPage(Url)'获取Html代码函数
err.clear
On Error Resume Next
dim http
set http=Server.createobject("Microsoft.XMLHTTP")
Http.open "GET",url,false
'HTTP的通信方式,比如GET或是POST '接收XML数据的服务器的URL地址。通常在URL中要指明ASP或CGI程序
'如果是异步通信方式(true)如果是同步方式(false)
Http.send()
'Send方法的参数类型是Variant,可以是字符串、DOM树或任意数据流。
'发送数据的方式分为同步和异步两种。在异步方式下,数据包一旦发送完毕,就结束Send进程,
'客户机执行其他的操作;而在同步方式下,客户机要等到服务器返回确认消息后才结束Send进程
if Http.readystate4 then
'0   Response对象已经创建,但XML文档上载过程尚未结束
'1   XML文档已经装载完毕
'2   XML文档已经装载完毕,正在处理中
'3   部分XML文档已经解析
'4   文档已经解析完毕,客户端可以接受返回消息

exit function
end if
GetHTTPPage = bytesToBSTR(Http.responseBody,"GB2312")'bytesToBSTR 编码转化函数
'=======对Http.responseBody的解释=========
'responseText:将返回消息作为文本字符串;
'responseBody:将返回消息作为HTML文档内容;
'responseXML:将返回消息视为XML文档,在服务器响应消息中含有XML数据时使用;
'responseStream:将返回消息视为Stream对象
'response.write GetHTTPPage

set http = Nothing
If Err Then
response.write err.description
Response.Write "brbrp align='center'font color='red'b无法抓取本页面列表信息!!!/b/font/p"
End If
End function

Function EndPage()'抓取下一页,跳转函数.PageNo---抓取的页数
if pgPageEnd Then'抓取下一页
response.write "scriptwindow.location='tignetcn.asp?pg="&pg+1&"';/script"
else
Response.Write "hr size=1 color=#00FF00 width=500"
response.write "centerfont size=2ptb===============================信息抓取完毕!!!================================/b/font/center"
response.end
end if
End Function
%
/body
/html

下面是fget.asp里两个函数,一个是截取,一个事过滤html:
1:截取函数:


Function strCut(strContent,StartStr,EndStr,CutType)
'strContent 要截取的内容
'StartStr 开始标志字符
'EndStr 结束标志字符
'CutType 截取类型 1--包括开始,结尾标记 2----不包括开始,结尾标记

Dim strHtml,S1,S2
strHtml = strContent
On Error Resume Next
If CutType=2 Then'不包括开始,结尾标记
S1 = InStr(strHtml,StartStr)+Len(StartStr)
S2 = InStr(S1,strHtml,EndStr)

If Err Then
response.write "Unknow Wrong:"&err.description&"---BG:" & S1 & " End:"&S2&"br"
Err.Clear
strCut=""
Exit Function
Else
If S1Len(StartStr) and S20 then
strCut=Mid(strHtml,S1,S2-S1)
Else
strCut=""
End If
End if
' response.Write strCut
' response.End()
Else'包括开始,结尾标记
S1 = InStr(strHtml,StartStr)
S2 = InStr(S1,strHtml,EndStr)+Len(EndStr)
If Err Then
response.write "Unknow Wrong:"&err.description&"---BG:" & S1 & " End:"&S2&"br"
Err.Clear
strCut=""
Exit Function
Else
If S10 and S2Len(EndStr) then
strCut=Mid(strHtml,S1,S2-S1)
Else
strCut=""
End If
End if
End If
End Function
2.html过滤函数,也过滤一些 回车,空格之类的

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)

Function FormatStr(str)
Dim s1,s2
If str"" then
str=replace(replace(Trim(str),chr(32)&chr(32),""),chr(9),"")
DO While (instr(str,"")0 and instr(str,"")0)
s1=InStr(str,"")
s2=Instr(s1,str,"")
If s10 and s20 then
str=replace(str,mid(str,s1,s2-s1+1),"")
End if
Loop
str=replace(replace(str,"","<"),"",">")
str=Replace(Replace(Replace(replace(replace(str,chr(13),""),chr(10),""),"""","”"),"'","’")," ","")
FormatStr=str
Else
FormatStr=""
End if
End Function

展开更多 50%)
分享

猜你喜欢

用XMLHTTP对象抓取网页源代码拆分数据写入数据库

Web开发
用XMLHTTP对象抓取网页源代码拆分数据写入数据库

用ASP实现远程抓取网页到本地数据库

Web开发
用ASP实现远程抓取网页到本地数据库

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

用MySQL创建数据库和数据库表代码

编程语言 网络编程
用MySQL创建数据库和数据库表代码

提高拆分数据库在网上运行、编辑的速度

电脑网络
提高拆分数据库在网上运行、编辑的速度

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Oracle数据库数据对象分析

电脑网络
Oracle数据库数据对象分析

桌面中心(二)数据库写入

PHP
桌面中心(二)数据库写入

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Java有能力抵挡LAMP的进攻吗?

Java有能力抵挡LAMP的进攻吗?

AJAX案例研究之详细剖析Gmail应用

AJAX案例研究之详细剖析Gmail应用
下拉加载更多内容 ↓