用xmlhttp
---------------------------------------------------------------
a. 使用xmlhhtp获得版块的第一页的帖子列表(前30条)
b. 对页面的字符串分析,可以发现帖子列表为标准的xml格式
c. 使用xsl对xml数据进行转换显示(可略过)
:_)
try:
1<style>
2.WithBreaks { word-wrap:break-word;width:400}
3a:link {color:#190552; text-decoration:none}
4a:active {color:#190552; text-decoration:none}
5a:visited {color:#29098A; text-decoration:none}
6a:hover {color:#29098A; text-decoration:underline}
7td{padding:5px;}
8.TrBg01{background:#99ccff;height:23;}
9.TrBg02{background:#DEE3F7;height:19;}
10</style>
1<form action="***" method="POST" name="moonpiazza">
2<input name="sURL" size="80" type="text" value="http://expert.csdn.net/Expert/ForumList.asp?roomid=306&typenum=1&xmlsrc=&csdnstyle="/>
3<input onclick="showList(1)" type="button" value="转换显示"/>
4<input onclick="showList(0)" type="button" value="原样显示"/>
5</form>
1<div id="oDiv"></div>
1<xml id="oXSL">
2<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
3<xsl:template match="/">
4<table bgcolor="#999999" border="0" cellpadding="1" cellspacing="1" width="100%">
5<tr class="TrBg01">
6<td><b>帖子标题</b></td>
7<td width="120"><b>最后回复时间</b></td>
8</tr>
9<xsl:for-each select="/*/table">
10<xsl:apply-templates select="tr"></xsl:apply-templates>
11</xsl:for-each>
12</table>
13</xsl:template>
14<xsl:template match="tr">
15<tr class="TrBg02">
16<td style="padding:7px;">
17<a target="_blank">
18<xsl:attribute name="href">
19<xsl:value-of select="td/a/@href"></xsl:value-of>
20</xsl:attribute>
21<xsl:value-of select="td[@class = 'WithBreaks']/a"></xsl:value-of>
22</a>
23</td>
24<td>
25<xsl:value-of select="td[@width = '80']"></xsl:value-of>
26</td>
27</tr>
28</xsl:template>
29</xsl:stylesheet>
30</xml>
1<script language="vbScript">
2Function showList(p_bTransform)
3dim sHtmlStr, sListStr
4dim nListDataStart, nListDataEnd
5dim oXML
6
7oDiv.innerHTML = "正在读取数据..."
8
9sListStr = ""
10sHtmlStr = GetHtml()
11nListDataStart = CLng(Instr(sHtmlStr,"<?xml version=")) + Len("<?xml version=""1.0"" encoding=""UTF-16""?>")
12nListDataEnd = CLng(Instr(sHtmlStr,"<!--列表结束//-->"))
13
14sListStr = sListStr & Mid(sHtmlStr, nListDataStart, (nListDataEnd - nListDataStart))
15
16sListStr = replace(sListStr,"/Expert/TopicView1.asp" ,"http://expert.csdn.net/Expert/TopicView1.asp")
17
18If (1 = p_bTransform) then
19sListStr = transformList(sListStr)
20End If
21
22oDiv.innerHTML = sListStr
23End Function
24
25Function transformList(p_sXMLStr)
26dim sXMLtStr
27dim oXML
28
29sXMLtStr = "<?xml version='1.0' encoding='gb2312'?>"
30sXMLtStr = sXMLtStr & "<CSDN_LIST>"
31sXMLtStr = sXMLtStr & p_sXMLStr
32sXMLtStr = sXMLtStr & "</CSDN_LIST>"
33
34Set oXML = createObject("Microsoft.XMLDOM")
35oXML.async = false
36oXML.loadxml(sXMLtStr)
37transformList = oXML.transformNode(oXSL)
38End Function
39
40
41Function GetHtml()
42
43dim sHtmlStr, sURL
44dim oXMLHttp
45
46sURL = document.moonpiazza.sURL.value
47Set oXMLHttp = createObject("Microsoft.XMLHTTP")
48
49Call oXMLHttp.Open("get", sURL, false)
50Call oXMLHttp.Send("")
51sHtmlStr = GetBytes2BSTR( oXMLHttp.responseBody )
52
53Set oXMLHttp = nothing
54GetHtml = sHtmlStr
55End Function
56
57Function GetBytes2BSTR(p_sHtmlStr)
58dim sReturnStr
59dim i,n
60
61sReturnStr = ""
62n = LenB(p_sHtmlStr)
63
64For i = 1 To n
65dim sCharCode
66dim sNextCharCode
67
68sCharCode = AscB( MidB(p_sHtmlStr, i, 1) )
69
70If (sCharCode < &H80) Then
71sReturnStr = sReturnStr & Chr(sCharCode)
72Else
73sNextCharCode = AscB( MidB(p_sHtmlStr, i+1, 1) )
74sReturnStr = sReturnStr & Chr(CLng(sCharCode) * &H100 + CInt(sNextCharCode))
75i = i + 1
76End If
77Next
78
79GetBytes2BSTR = sReturnStr
80End Function
81</script>
---------------------------------------------------------------
注:上面程序本地运行可以,通过IIS解释运行,需要客户端IE设置允许“通过域访问数据资源”
浏览器默认不允许垮域访问
IE ==> internet选项 ==> 安全设置 ==> 自定义级别 ==> 启用"通过域访问数据资源"
通过IIS解释运行:
可以改变逻辑,由A改变为B:
A. 客户端 ==> 外部数据源(URL) ==> 客户端得到返回数据
==>
B. 客户端 ==> 服务器端(获得URL) ==> 外部数据源(URL) ==> 服务器端得到返回数据,发送数据到客户端 ==> 客户端得到返回数据
参考
http://expert.csdn.net/Expert/topic/1959/1959431.xml?temp=.8885004