注册 登录
编程论坛 ASP技术论坛

asp采集时为什么截取不到标题

a768841969 发布于 2011-04-07 15:50, 1070 次点击
a-5.asp
<%
on error resume next
'得到文件二进制数据
Function GetWebData(strUrl)
dim curlpath
dim Retrieval
  Set Retrieval = Server.CreateObject("Microsoft.XMLHTTP")
  With Retrieval
    .Open "Get", strUrl, False,"",""
    .Send
    GetWebData =.ResponseBody
  End With
  Set Retrieval = Nothing
End Function
Function GetKey(HTML,Start,Last)
IF InStr(HTML,Start)>0 Then
filearray=split(HTML,Start)
IF InStr(filearray)>0 Then
filearray2=split(filearray(1),Last)
Else
Getkey=filearray(1)
End IF
GetKey=filearray2(0)
Else
Getkey="HTML中不包含"&Start
End IF
End Function

Function bytesToBSTR(Body,Cset)
Dim Objstream
Set Objstream = Server.CreateObject("adodb.stream")
objstream.Type = 1
objstream.Mode =3
objstream.Open
objstream.Write body
objstream.Position = 0
objstream.Type = 2
objstream.Charset = Cset
BytesToBstr = objstream.ReadText
objstream.Close
set objstream = nothing
End Function
%>

a-6.asp
<!--#include file="conn1.asp"-->
<!--#include file="a-5.asp"-->
<%
fileurl=http://mil.news.这是新浪的一个新闻页面
angde=GetWebData(fileurl)
page=bytesToBSTR(angde,"gb2312")
response.Write(page)
Title = GetKey(page,"<title>","</title>")------------这里可能有错误但是我不知道怎么改
response.write(Title)
%>
为什么用标题输不来呢??
输出来是一个空白页面。
这是怎么回事??


[ 本帖最后由 a768841969 于 2011-4-8 15:20 编辑 ]
19 回复
#2
a7688419692011-04-07 16:34
求助 求助
#3
hams2011-04-08 08:19
where title='"&Title&"'",

不要设条件试试
#4
a7688419692011-04-08 08:38
不行啊
#5
a7688419692011-04-08 15:20
求助
#6
dzt00012011-04-08 16:28
可以获取到整个页面,但标题获取不到,有可能是GetKey函数错误,我在查,稍等
#7
a7688419692011-04-08 16:49
谢谢
#8
dzt00012011-04-08 16:52
是GetKey函数写错了,改了改,能运行。但不保证在其他地方能用。

Function GetKey(HTML,Start,Last)
IF InStr(HTML,Start)>0 Then
    filearray=split(HTML,Start)
    IF InStr(filearray(1),Last)>0 Then
        filearray2=split(filearray(1),Last)
    Else
        Getkey=filearray(1)
    End IF
    GetKey=filearray2(0)
Else
    Getkey="HTML中不包含"&Start
End IF
End Function


送你一段我常用的吧

'截取字符串,1.包括起始和终止字符,2.不包括
Function strCut(strContent,StartStr,EndStr,CutType)
Dim strHtml,S1,S2
strHtml = strContent
On Error Resume Next
Select Case CutType
Case 1
S1 = InStr(strHtml,StartStr)
S2 = InStr(S1,strHtml,EndStr)+Len(EndStr)
Case 2
S1 = InStr(strHtml,StartStr)+Len(StartStr)
S2 = InStr(S1,strHtml,EndStr)
End Select
If Err Then
strCute = "<p align='center'>没有找到需要的内容。</p>"
Err.Clear
Exit Function
Else
strCut = Mid(strHtml,S1,S2-S1)
End If
End Function
 
 
#9
a7688419692011-04-08 17:05
为什么不能保证在其他地方能用,我看网页的标题都不是在<title></title>吗  另外这个标题还有多出来几个字怎么去掉
外交部:对日本向太平洋排放核废液表示关切_新闻中心_新浪网----去掉
#10
dzt00012011-04-08 17:31
因为这个GetKey函数写的不规范,我也没有仔细改,有可能遇到其他情况还会出错。

在加title=replace(title,"_新浪军事_新浪网","")不就替换了。不过新浪每个新闻专题都不一样

或者这样title = GetKey(page,"<title>","_")

 

[ 本帖最后由 dzt0001 于 2011-4-8 17:32 编辑 ]
#11
a7688419692011-04-08 18:36
恩  谢谢
#12
a7688419692011-04-08 19:14
在问一下 如果在截取时 start 选<table> 但是它后面也有<table>那怎么整啊,好像截取的都是第一次出现<table>的
还有你上面的这句Select Case CutType是什么意思


[ 本帖最后由 a768841969 于 2011-4-8 19:26 编辑 ]
#13
dzt00012011-04-08 20:49
CutType是strCut的一个参数
select case是asp的条件语句,和If...Then...Else同样功效

只能截取第一个,如果你要截取某个特定的<table>或<div中的内容,你就要找到这个<table>的特别之处,如<table id="maintable">或者<div class="classname1">
#14
a7688419692011-04-09 08:43
你那个select case 1 和case 2有什么区别  为什么我用1读取不到,而用2就能读取到呢
#15
hams2011-04-09 08:53
因为条件就是1或者2
这些基本的语法还是要学习一下
#16
a7688419692011-04-09 09:34
哦  是这个意思吗  if case=1 else case=2就这2种情况吗
#17
dzt00012011-04-09 09:53
以下是引用a768841969在2011-4-9 08:43:43的发言:

你那个select case 1 和case 2有什么区别  为什么我用1读取不到,而用2就能读取到呢

怎么可能!
用2
title = strCut(page,"<title>","</title>",2)
读取的是:简氏称中国拥有武器装备研发权企业2/3系民企_新浪军事_新浪网

用1
title = strCut(page,"<title>","</title>",1)
读取的是:<title>简氏称中国拥有武器装备研发权企业2/3系民企_新浪军事_新浪网</title>
(你要看网页源文件的,因为<title>标签里是标题,只会出现在浏览器的标题栏里,网页当然是空的,不要以为没获取到)
#18
a7688419692011-04-09 10:02
能不能循环截取,比如截取一个表格里的数据并把截取的数据放入数据库
Id1    Name1    Pd1
Id2    Name2    Pd2
定义3个截取函数 把Id1 、Name1和Pd1截取出来,那下面一行怎么截取呢
#19
a7688419692011-04-09 10:07
哦 是输出<title>外交部:对日本向太平洋排放核废液表示关切_新闻中心_新浪网</title>,但是1好像没必要用啊,哪里能用到1的情况
#20
dzt00012011-04-09 10:32
程序代码:
<TABLE cellSpacing=0 cellPadding=5 border=1>
<TR>
<TD style="BACKGROUND-COLOR: #c6d2f5"><STRONG>商品编码:6204630024</STRONG></TD></TR>   
<TR>
<TD>商品描述:<LABEL
style="COLOR: gray">合纤制女式长裤、马裤</LABEL></TD></TR>
<TR>
<TD>申报要素:<LABEL
style="COLOR: gray">1.品名;2.织造方法(机织等);3.种类(西服、便服套装、上衣、长裤、马裤、工装裤等);4.类别(女式);5.成分含量;6.品牌</LABEL></TD></TR>
</TABLE>

 
举个例子,如果网页上有上面这段代码,是一个表格,你要获取整个表格内容包括边框边距等,就要用1。

关于select case条件语句,你可以去看看asp语法,语法是关键,否则连代码都看不懂,更不要说自己改或写了。

要截取多个字符串,那就得根据网页HTML源代码,自己琢磨了,可以写,不过用处不大,网页千变万化,不值得去写
1