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

2016-02-19 20:03 25 1 收藏

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

【 tulaoshi.com - Web开发 】

!--#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

' 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

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

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)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过滤函数,也过滤一些 回车,空格之类的

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

来源:http://www.tulaoshi.com/n/20160219/1622605.html

延伸阅读
Oracle数据库数据对象中最基本的是表和视图,其他还有约束、序列、函数、存储过程、包、触发器等。对数据库的操作可以基本归结为对数据对象的操作,理解和掌握Oracle数据库对象是学习Oracle的捷径。 表和视图 Oracle中表是数据存储的基本结构。ORACLE8引入了分区表和对象表,ORACLE8i引入了临时表,使表的功能更强大。视图是一个...
面向:初学者。 目的:如果一年的数据较多,希望在分年的数据库中保存数据。 知识点: 1.数据库拆分。 2.文件查找技术。 3.文件复制。 4.链接表的刷新。 步骤: 1.将一些每年都要使用(修改,添加等)的表的名称前两个字母改为共同的(如:Or_业务人员名单,Or_收货人名单等),注意不要是“MS”,“SW”,“US”等系统要使用的字母。 2.将...
标签: ASP
从浏览器到数据库关系: browser mschart control javascript (client-side) asp (server-side vbscript) ado odbc dbms ================== 关键在于将 RS 内的内容赋给 client-side javascript. source code: ==================                  &...
标签: MySQL mysql数据库
前几天因为MySQL数据库部分数据损坏原因,我尝试了下恢复数据,之后整理以下文档,供各位参考,以备各位同事以后如有类似问题,可以少走些弯路,尽快解决问题。 环境:Windows2003 数据库:MySQL 损坏数据文件名:function_products 将数据库内容物理文件直接导入到mysql\data下,每只表各3个文件,依次分别为:.frm .myd .myi。首先我第一...
1、使用SHOW语句找出在服务器上当前存在什么数据库: mysql SHOW DATABASES; +----------+ | Database | +----------+ | mysql | | test | +----------+ 3 rows in set (0.00 sec)  2、创建一个数据库abccs mysql CREATE DATABASE abccs; 注意不同操作系统对大小写的敏感。 3、选择你所创建的数据库...

经验教程

384

收藏

15
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部