,,asp 小偷采集程序原理与常用函数方法
事实上,采集程序通过XML中的XMLHTTP组件调用其他网站的网页。比如新闻采集类的节目,很多都是调用新浪的新闻网页,把里面的html替换掉,把广告过滤掉。
使用采集程序的好处是:不需要维护网站,因为采集程序中的数据来自其他网站,会随着本网站的更新而更新;它可以节省服务器资源。一般程序只收集几个文件,所有网页都是其他网站的。缺点:
不稳定,如果目标网站出错,程序也会出错。而且如果目标网站升级维护,采集方案也要相应修改;速度,因为是远程调用,肯定比在本地服务器上读取数据慢。
一、实例这里简单介绍一下XMLHTTP在ASP中的应用。复制代码如下:% '常用函数' 1。输入url目标网页地址,返回值getHTTPPage是目标网页函数的html代码gethttp page(URL)dimhttp set http=server . createobject(' MSXML 2 . xmlhttp ')http . open ' get ',URL,false http . send()if http . ready state 4然后退出函数end if gethttp page=bytestobster(http . response body,GB 2312 ')set http=nothing if err . number 0然后err.clear end function' 2 .转换垃圾邮件。直接用xmlhttp调用有汉字的网页,会产生垃圾信息。可以通过adodb.stream组件函数bytestopstr(body)dim objstream set objstream=server . createobject(' adodb . stream ')obst stream进行转换。type=对象流。mode=3objstream。openobjstream。writebodyobjstream。position=0objstream。type=2objstream。charset=' gb2312 ' '转换原图将UTF-8代码翻译成gb2312代码,否则用XMLHTTP组件直接调用带中文字符的网页会出现乱码bytestopstr=objstream。readtextobjstream。close set objstream=nothing end function '。这里尝试调用http://www.google dimurl的html内容,也就是‘3358 www . Google’;Html=getHTTPPage(Url)response . write Html %
二、几种常用函数InStr函数描述返回一个字符串(string2)在另一个字符串(string1)中第一次出现的位置。语法InStr(string1,string2)例如:dimsearchstring,searchcharsearchstring=' 3358 www . Google ' '要搜索的字符串。SearchChar='blue1000 ' '搜索' blue1000 '。Mybk=instr (searchstring,searchchar)'如果找不到则返回8 '或' 0 ',例如:searchchar=' bk ' mybk=instr(search string,search char)'返回0 Mid函数说明:从字符串中返回指定数量的字符。语法Mid(string,start,over)例如:Dim MyBK MyBK=Mid(' Our BK(www . Google)design ',7,12)' Intercept string ' Our BK(www . Google)design '第7个字符后12个字符'此时,MyBK的值就变成了' www.google' Replace函数dimsearch string,search char search string=' Our BK design is a website construction resource website ' '要搜索的字符串。SearchString=Replace(search string,' BK Design ',' Www.google ')'这时search string的值就变成了'我们的Www.google是一个建站资源网站'
三。截取指定区域的HTML代码。比如我只想得到以下HTML代码中' td '和'/td '之间的文本:html titleBK(www.google) Google搜索引擎/标题正文表TRTD/TD/tr TRTD ID=' content ' BK(www . Google)Google搜索引擎是一个拥有很多资源的站点./TD/TR/表格/正文/html%.dimstrbK,start,over,rsbKstrbK=gethttppage(网页的地址)start=instr (strbk,' TD ID='' content ' ')'这里的作用是获取字符串开头的位置。这里有人要问了:原代码是td id='Content '。为什么您在这里称之为td id=' '内容'?回答:在asp(确切的说是VBscript)中,用两个双引号来表示一个双引号,因为双引号对于程序来说是一个敏感字符。)over=Instr(StrBK,'…/td/tr ')'这里的函数是获取字符串结尾的位置。这里又有人会问:(:为什么程序调用HTML代码前面多了三个点'…'?答:提示:上面一行还有一个/td/tr。如果这里使用了/td/tr,程序会错误地将上面一行中的/td/tr作为要获取的字符串的结尾。Rsbk=mid (StrBK,start,over-start)'这里的功能是取出StrBK中从开始字符到结束字符的字符串。上一节也讲了mid函数;过起始是计算起始位置和结束位置之间的距离,即字符数。Response.write(RsBK)'对最后一个输出程序获得的content%不要太高兴。当你运行它的时候,你会发现页面的html代码是错误的。为什么?因为你获取的html代码是:td id='Content'BK(www.google)。谷歌搜索引擎是一个有很多资源的网站…看到了吗?有不完整的HTML代码!我该怎么办?Start=instr (strbk,' td id='Content ' ')。此语句获取中的“TD ID=' content '”
StrBK中的位数,现在我们可以在程序语句后面加上17,然后程序会把位置指向td id='Content '后面的字符。好了,程序会改成这样:% … dimstrbk,start,over,RsBK StrBK=getHTTPPage(网页的地址)start=instr (strbk,' TD id=' content ' ')17 over=instr(StrBK,'…/TD/tr ')'这里也可以减七(-7)去掉三个点。RSBK=mid (strbk,)Over-start)response . write(rsbk)%这样就可以了,我们可以把想要的东西偷出来,显示在自己的页面上,呵呵~
四。删除或修改获得的字符,将RSBK中的' BK(www.google)'替换为' bk': RSBK=replace (RSBK,' bk (www.google)',' BK ')或者直接删除'(www.google)': RSBK=replace (RSBK,'(www.google.com)现在RsBK变成了:' BK Google搜索引擎是一个有很多资源的站点…'。但实际上,有一些情况下,replace函数可能并不合适,比如我们想去掉某个字符串中的所有连接。连接可能包括很多类型,replace只能替换其中特定的一种。我们不能用一个又一个相应的替换函数来替换它们吧?
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。