[转]如何用asp编写网站数据采集程序(二)

六、对抓取的网页进行截取
首先写个截取子程序cutBy(head,headCusor,bot,botCusor),它可以按照你指定的首尾字符串、及位置偏移指针,对抓取的网页进行裁减。程序中参数head,headCusor,bot,botCusor分别是首字符串,首偏移值,尾字符串,尾偏移值;偏移值单位为字符数,向前偏移为负值,向后偏移为正值。
public sub cutBy(head,headCusor,bot,botCusor)
if isGet_= false then call steal()
On Error Resume Next
url=src_
value_=mid(value_ ,instr(value_ ,head)+len(head)+headCusor,instr(value_ ,bot)-1+botCusor-instr(value_ ,head)-len(head)-headcusor)
If Err.Number<>0 Then Response.Write “裁减“&url&” 失败。”
end sub
把以上cutBy子程序添加到clsThief类中,然后在2hand-cj.asp中增加如下调用:
<% s1=" ” '要裁减的起始标志为

pos1=”-22″ '距起始标志向前22个字符,从此处开始裁减
s2=”var x = 50,y = 60″ '要裁减的结束标志
pos2=”-2055″ '距结束标志向前2055个字符,到此处结束裁减
myThief.cutBy s1,pos1,s2,pos2 '开始裁减
url_tittle=myThief.value '获得裁减的内容
Html=””&url_tittle&”” '最后结果保存在Html中
Html=”

“&Html '最前部添加


再次执行2hand-cj.asp ,效果如下图2,只保留了表格,大功告成!
七、替换网页中的数据
检查一下抓取的表格中每个帖子网址,其格式均为InformationDisplay.php?id=,这样的网址是不正确的!应该替换成http://market.ah163.net/city/InformationDisplay_enter.php?id=才行,所以我们在clsThief类中再增加一个替换程序change(oldStr,str),用于替换网址,其中参数oldStr,str分别是旧字符串,新字符串。
public sub change(oldStr,str) '对偷到的内容中的个别字符串用新值更换/方法
if isGet_= false then call steal()
value_=replace(value_ , oldStr,str)
end sub
同时在2hand-cj.asp中也增加如下调用:
<% myThief.change "“)
url=TRIM(url) '去掉空格
'—–得到大类别和小类别
CateIDText=GetKey(HTML,”[“,”]”) '截取类别数据
CateIDText=TRIM(CateIDText)
select case CateIDText
case “交通” '如果类别数据=交通
CateID=8 ' 大类别CateID就等于8
SubCateID=1 ' 小类别SubCateID就等于1
case “游戏”
CateID=1
SubCateID=26
case “电脑”
CateID=1
SubCateID=1
case “房产”
CateID=6
SubCateID=1
case “通讯”
CateID=2
SubCateID=1
case “宠物”
CateID=31
SubCateID=221
case “求职”
CateID=37
SubCateID=230
case “影音”
CateID=4
SubCateID=1
case “家用”
CateID=5
case “书籍”
SubCateID=1
CateID=17
case “其它”
CateID=0
SubCateID=1
end select
'—–取得方式
fangshi=GetKey(HTML,”

“,”

“)
fangshi=TRIM(right(fangshi,4))
select case fangshi
case “求购”
SoftType=”买进”
case “出售”
SoftType=”卖出”
end select
if instr(fangshi,”””>”)>0 then fangshi=”其他” '如果fangshi含有字符”> 则fangshi=”其他”
'—–取得价格
jiage=GetKey(HTML,”

“,”

“)
jiage=TRIM(mid(jiage,44))
'—–取得帖子发布日期
DayDate=GetKey(HTML,”

“,”

“)
DayDate=right(DayDate,10)
'—–显示得到的帖子数据
Response.write tittle
Response.write url
Response.write fangshi
Response.write jiage
Response.write DayDate
九、帖子数据入库
最后要把帖子数据tittle、url、fangshi、jiage、DayDate写入#2hand.mdb库中,为防止帖子重复入库,需要写个 testsj函数来判断某帖子是否已入库了,假如某帖子URL在库中找不到,则将该帖入库,否则就不予入库,代码如下:
'检测库中是否有某帖子的URL
Function testsj(titURL)
SQL=”select * from SoftDown_SoftInfo where url like '%”&titURL&”%' ”
set rs=server.createobject(“adodb.recordset”)
rs.open SQL,conn,1,1
if rs.bof and rs.eof then
testsj=True
ErrMsg=ErrMsg & “

  • 你要找的帖子不存在,或者已经被管理员删除!

  • else
    testsj=false '库中无该帖子的URL
    end if
    rs.close
    set rs=nothing
    End Function
    接下来打开数据库语句如下:
    db=”#2hand.mdb”
    Set conn = Server.CreateObject(“ADODB.Connection”)
    connstr=”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=” & Server.MapPath(db)
    conn.Open connstr
    '—–判断帖子是否已经入库?
    FoundErr=False
    FoundErr=testsj(url)
    '—–帖子数据写入库中
    if FoundErr=True then
    set rs=server.createobject(“adodb.recordset”)
    sql=”select * from SoftDown_SoftInfo where (SoftID is null)”
    rs.open sql,conn,1,3
    if rs.bof and rs.eof then
    ErrMsg=ErrMsg & “

  • 你要找的帖子不存在,或者已经被管理员删除!

  • else
    ArticleTitle=rs(“SoftName”)
    end if
    rs.addnew
    rs(“SoftName”)=tittle
    rs(“url”)=url
    rs(“CateID”)=CateID '所属大类
    rs(“SubCateID”)=SubCateID '所属小类
    rs(“SoftType”)=fangshi '出售\买进\出租\求租等方式
    rs(“SoftSize”)=jiage '价格
    rs(“hfsj”)=DayDate '发布时间
    rs.update
    rs.close
    set rs=nothing
    Response.write ” 该帖入库成功


    end if

    赞(0) 打赏
    分享到: 更多 (0)

    © 2024 Mikel   网站地图 备案号:冀ICP备17031416号

    觉得文章有用就打赏一下文章作者

    支付宝扫一扫打赏

    微信扫一扫打赏