小偷&小偷入库&采集入库

XMLHTTP应用参考 
一、使用步骤: 
1、创建XMLHTTP对象 //需MSXML4.0支持 
2、打开与服务端的连接,同时定义指令发送方式,服务网页(URL)和请求权限等。客户端通过Open命令打开与服务端的服务网页的连接。与普通HTTP指令传送一样,可以用"GET"方法或"POST"方法指向服务端的服务网页。 
3、发送指令。 
4、等待并接收服务端返回的处理结果。 
5、释放XMLHTTP对象

二、XMLHTTP方法: 
1、XMLHTTP对象 
备注:客户机可以使用XMLHTTP对象发送任意的HTTP请求,接受HTTP应答,还可以对应答的XML文档进行解析。

Open方法:初始化一个Msxml2.XMLHTTP请求,指定HTTP请求方式、URL以及鉴定信息。 
Open( bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword ) 
bstrMethod: 数据传送方式,即GET或POST。 
bstrUrl:   服务网页的URL。 
varAsync:   是否同步执行。缺省为True,即同步执行,但只能在DOM中实施同步执行。用中一般将其置为False,即异步执行。 
bstrUser:   用户名,可省略。 
bstrPassword:用户口令,可省略。

Send方法:发送HTTP请求到服务器,返回应答。 
语法: 
oXMLHttpRequest.send(varBody) 
说明:此方法是否同步取决于Open方法的varAsync参数。如果设为True则为同步,调用立刻返回,如果设为False调用直到整个应答被接收了才返回。

setRequestHeader( bstrHeader, bstrvalue ) 
bstrHeader:HTTP 头(header) 
bstrvalue: HTTP 头(header)的值

如果Open方法定义为POST,可以定义表单方式上传: 
xmlhttp.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded")

三、XMLHTTP属性: 
onreadystatechange:在同步执行方式下获得返回结果的事件句柄。只能在DOM中调用。 
responseBody:   结果返回为无符号整数数组。 
responseStream:   结果返回为IStream流。 
responseText :   结果返回为字符串。 
responseXML:   结果返回为XML格式数据。

四、示例: 
< script language="javascript" > 
function getDatal(url){ 
  var xmlhttp = new ActiveXObject("MSXML2.XMLHTTP.4.0";//创建XMLHTTPRequest对象,需MSXML4.0支持 ["MSXML2.XMLHTTP.4.0","MSXML2.DOMDocument.4.0"] 
  xmlhttp.open("GET",url,false,"","";   //使用HTTP GET初始化HTTP请求 
  xmlhttp.send("";             //发送HTTP请求并获取HTTP响应 
  return xmlhttp.responseXML;       //获取XML文档 

< /script >

现在网上流行的小偷程序比较多,有新闻类小偷,音乐小偷,下载小偷,那么它们是如何做的呢,下面我来做个简单介绍,希望对各位站长有所帮助。 
(一)原理 
小偷程序实际上是通过了XML中的XMLHTTP组件调用其它网站上的网页。比如新闻小偷程序,很多都是调用了sina的新闻网页,并且对其中的html进行了一些替换,同时对广告也进行了过滤。用小偷程序的优点有:无须维护网站,因为小偷程序中的数据来自其他网站,它将随着该网站的更新而更新;可以节省服务器资源,一般小偷程序就几个文件,所有网页内容都是来自其他网站。缺点有:不稳定,如果目标网站出错,程序也会出错,而且,如果目标网站进行升级维护,那么小偷程序也要进行相应修改;速度,因为是远程调用,速度和在本地服务器上读取数据比起来,肯定要慢一些。 
(二)事例

下面就XMLHTTP在ASP中的应用做个简单说明

代码: <% 
'常用函数

'1、输入url目标网页地址,返回值getHTTPPage是目标网页的html代码 
function getHTTPPage(url) 
  dim Http 
  set Http=server.createobject("MSXML2.XMLHTTP" 
  Http.open "GET",url,false 
  Http.send() 
  if Http.readystate<>4 then 
    exit function 
  end if 
  getHTTPPage=bytesToBSTR(Http.responseBody,"GB2312" 
  set http=nothing 
  if err.number<>0 then err.Clear 
end function

'2、转换乱玛,直接用xmlhttp调用有中文字符的网页得到的将是乱玛,可以通过adodb.stream组件进行转换 
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

'下面试着调用http://wmjie.51.net/swords的html内容 
Dim Url,Html 
Url="http://wmjie.51.net/swords/" 
Html = getHTTPPage(Url) 
Response.write Html 
%>

------------------------------------------------------ 
代码: 
'代码]用XMLHTTP读取远程文件

<% 
Response.Buffer = True 
Dim objXMLHTTP, xml 
Set xml = Server.CreateObject("Microsoft.XMLHTTP"

xml.Open "GET", "http://wmjie.51.net/swords/diary.rar", False

xml.Send

' Add a header to give it a file name: 
Response.AddHeader "Content-Disposition", _ 
              "attachment;filename=mitchell-pres.zip"

' Specify the content type to tell the browser what to do: 
Response.ContentType = "application/zip"

' Binarywrite the bytes to the browser 
Response.BinaryWrite xml.responseBody

Set xml = Nothing 
%>

------------------------------------- 
如何写ASP入库小偷程序 
入库小偷的原理也很简单:就是用XMLHTTP远程读取网页的内容,然后根据需要,对读到的内容进行加工(过滤,替换,分类),最后得到自己需要的数据,加入到数据库中。 
首先:我们先用XMLHTTP读取远程网页(我的另一片文章中有介绍)。 
其次:对内容进行过滤,这个是比较关键的步骤,比如说,我要从远程网页上提取出所有url连接,我应该怎么做呢? 
代码: 
‘这里用的是正则式 
Set objRegExp = New Regexp   '建立对象 
objRegExp.IgnoreCase = True   '大小写忽略 
objRegExp.Global = True       '全局为真 
objRegExp.Pattern = "http://.+?"   '匹配字段 
set mm=objRegExp.Execute(str)   '执行查找,str为输入参数 
For Each Match in mm     '进入循环 
    Response.write(Match.Value)   '输出url地址 
next

然后,我们需要根据需要做一些替换功能,把不必要的数据替换掉,这个比较简单,用Replace函数即可。 
最后,进行数据库操作 
------------------------------- 
一个例子 
代码: 
<% 
On Error Resume Next 
Server.ScriptTimeOut=9999999 
Function getHTTPPage(Path) 
    t = GetBody(Path) 
    getHTTPPage=BytesToBstr(t,"GB2312" 
End function

'首先,进行小偷程序的一些初始化设置,以上代码的作用分别是忽略掉所有非致命性错误,把小偷程序的运行超时时间设置得很长(这样不会出现运行超时的错误),转换原来默认的UTF-8编码转换成GB2312编码,否则直接用XMLHTTP组件调用有中文字符的网页得到的将是乱码。

Function GetBody(url) 
    on error resume next 
    Set Retrieval = CreateObject("Microsoft.XMLHTTP" 
    With Retrieval 
    .Open "Get", url, False, "", "" 
    .Send 
    GetBody = .ResponseBody 
    End With 
    Set Retrieval = Nothing 
End Function

'然后调用XMLHTTP组件创建一个对象并进行初始化设置。

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

Function Newstring(wstr,strng) 
    Newstring=Instr(lcase(wstr),lcase(strng)) 
    if Newstring<=0 then Newstring=Len(wstr) 
End Function

'处理抓取回来的数据需要调用adodb.stream组件并进行初始化设置。%>

'以下即为页面显示部分

<% 
Dim wstr,str,url,start,over,city 
'定义一些需要使用到的变量

city = Request.QueryString("id") 
'程序传回的ID变量(即用户选择的城市)赋给id

url="http://appnews.qq.com/cgi-bin/news_qq_search?city="&city&"" 
'这里设置需要抓取的页面地址,当然你也可以直接指定某个地址而不使用变量

wstr=getHTTPPage(url) 
'获取指定页面的全部数据

start=Newstring(wstr," <html>") 
'这里设置需要处理的数据的头部,这个变量应视不同情况而设置,具体内容可以通过查看需要抓取的页面的源代码来确定。因为在这个程序里我们需要抓取整个页面,所以设置为页面全部抓取。注意,设置的内容必须是页面内容唯一的,不可以重复。

over=Newstring(wstr," </HTML>") 
'和start相对应的就是需要处理的数据的尾部,同样的,设置的内容必须是页面中唯一的。

body=mid(wstr,start,over-start) 
'设置显示页面的范围

'下面就是动用乾坤挪移***的时候了,通过replace可以用一些字符替换掉数据中指定的字符。

body = replace(body,"skin1","天气预报 - 斯克网络") 
body = replace(body,"http://appnews.qq.com/cgi-bin/news_qq_search?city","tianqi.asp?id")

'本程序中已经完成了替换的工作,如果有其他需要的话可以继续进行类似的替换操作。

response.write body 
引用: 远程获取内容,并将内容存在本地电脑上,包括任何文件

<% 
'----------远程获取内容,并将内容存在本地电脑上,包括任何文件!---------- 
'On Error Resume Next 
'Set the content type to the specific type that you are sending. 
'Response.ContentType = "IMAGE/JPEG" 
'-------------------------------定义输出格式-----------------------------

Path=request.querystring("p") 
sPath = Path 
if left(lcase(path),7) <> "http://"; then 
'-------------如果前面没有http就是本地文件,交给LocalFile处理------------ 
LocalFile(path) 
else 
'--------------------否则为远程文件,交给RemoteFile处理------------------ 
RemoteFile(Path) 
end if 
'Response.Write err.Description

sub LocalFile(Path) 
'-------------------如果为本地文件则简单的跳转到该页面------------------- 
Response.Redirect Path 
End Sub

Sub RemoteFile(sPath) 
'-------------------------处理远程文件函数------------------------------ 
FileName = GetFileName(sPath) 
'-------------GetFileName为把地址转换为合格的文件名过程------------- 
FileName = Server.MapPath("/UploadFile/Cache/" & FileName) 
Set objFso = Server.CreateObject("Scripting.FileSystemObject") 
'Response.Write fileName 
if objFso.FileExists(FileName) Then 
'--------------检查文件是否是已经访问过,如是,则简单跳转------------ 
Response.Redirect "/uploadfile/cache/" & GetFileName(path) 
Else 
'----------------否则的话就先用GetBody函数读取---------------------- 
'Response.Write Path 
t = GetBody(Path) 
'-----------------用二进制方法写到浏览器上-------------------------- 
Response.BinaryWrite t 
Response.Flush 
'-----------------输出缓冲------------------------------------------ 
SaveFile t,GetFileName(path) 
'------------------将文件内容缓存到本地路径,以待下次访问----------- 
End if 
Set objFso = Nothing 
End Sub

Function GetBody(url) 
'-----------------------本函数为远程获取内容的函数--------------------- 
'on error resume next 
'Response.Write url 
Set Retrieval = CreateObject("Microsoft.XMLHTTP") 
'----------------------建立XMLHTTP对象----------------------------- 
With Retrieval 
.Open "Get", url, False, "", "" 
'------------------用Get,异步的方法发送----------------------- 
.Send 
'GetBody = .ResponseText 
GetBody = .ResponseBody 
'------------------函数返回获取的内容-------------------------- 
End With 
Set Retrieval = Nothing 
'response.Write err.Description 
End Function

Function GetFileName(str) 
'-------------------------本函数为合格化的文件名函数------------------- 
str = Replace(lcase(str),"http://";,"") 
str = Replace(lcase(str),"//","/") 
str = Replace(str,"/","") 
str = replace(str,vbcrlf,"") 
GetFileName = str 
End Function

sub SaveFile(str,fName) 
'-------------------------本函数为将流内容存盘的函数------------------- 
'on error resume next 
Set objStream = Server.CreateObject("ADODB.Stream") 
'--------------建立ADODB.Stream对象,必须要ADO 2.5以上版本--------- 
objStream.Type = adTypeBinary 
'-------------以二进制模式打开------------------------------------- 
objStream.Open 
objstream.write str 
'--------------------将字符串内容写入缓冲-------------------------- 
'response.Write fname 
objstream.SaveToFile "c:\inetpub\myweb\uploadfile\cache\" & fName,adSaveCreateOverWrite 
'--------------------将缓冲的内容写入文件-------------------------- 
'response.BinaryWrite objstream.Read 
objstream.Close() 
set objstream = nothing 
'-----------------------关闭对象,释放资源------------------------- 
'response.Write err.Description 
End sub 
%>

(0)

相关推荐

  • 小偷&小偷入库&采集入库

    XMLHTTP应用参考  一.使用步骤:  1.创建XMLHTTP对象 //需MSXML4.0支持  2.打开与服务端的连接,同时定义指令发送方式,服务网页(URL)和请求权限等.客户端通过Open命令打开与服务端的服务网页的连接.与普通HTTP指令传送一样,可以用"GET"方法或"POST"方法指向服务端的服务网页.  3.发送指令.  4.等待并接收服务端返回的处理结果.  5.释放XMLHTTP对象 二.XMLHTTP方法:  1.XMLHTTP对象  备注:

  • 也谈采集入库的技术

    落伍的贴也看了很多了,发现了很多讲小偷技术的,如精华贴里的--小偷程序原理和简单示例: [url]http://www.im286.com/viewthread.php?tid=407182&extra=page%3D1[/url] 等等,也有提供采集程序下载的,但我还没看到一篇完整的入库的文章,或许是我看的贴少吧.虽然不是很深奥,我还是讲讲吧,希望高手别见笑啦,以前发了个原创的影视系 统,却没落伍,这次再求落伍啦,希望大家帮顶下,也希望我能落伍!! 入库也和小偷一样,要先得到需入库的部分,我这

  • 解决dede生成静态页和动态页转换的一些问题,及火车采集入库生成动态的办法

    -------------------------------------------------------- 风十三 落伍首发  转载请注明作者和出处 ------------------------------------------------------ 1.如何修改默认发布为动态页: 这个其实很简单,会改html就可以了!把dede文件夹打开,用编辑器打开article_add.php,找到<td width="90">发布选项:</td>     

  • perl 采集入库脚本分享

    #!/usr/bin/perl -w use DBI; use POSIX qw(strftime); my $dbh = DBI->connect("DBI:mysql:shencan:111.1.32.153:3306″,"shencan","shencan"); #my $sql = "select * from shencan.LVS"; #my $sth = $dbh->prepare($sql); #$sth-&

  • ASP采集入库生成本地文件的几个函数

    '*****************************************************************' function' 作用 :利用流保存文件' 参数 :from(远程文件地址),tofile(保存文件位置)'*****************************************************************Private Function SaveFiles(byref from,byref tofile)Dim DatasDa

  • 基于PHP的简单采集数据入库程序

    说到采集,无非就是远程获取信息->提取所需内容->分类存储->读取->展示 也算是简单"小偷程序"的加强版吧 下面是对应核心代码(别拿去做坏事哦^_^) 所要采集的内容是某游戏网站上的公告,如下图: 可先利用file_get_contents和简单正则获取基本页面信息 整理下基本信息,采集入库: <?php include_once("conn.php"); if($_GET['id']<=8&&$_GET['id

  • 基于PHP的简单采集数据入库程序【续篇】

    在上篇文章中,我们已经采集新闻信息页的列表数据,接下来要做的操作就是从数据库中读取所需要采集的URL,进行页面抓取就行 新建一个content表 不过需要注意的一点是,不能再采用采集URL这种id递增的方法去采集,因为数据表中可能出现id断续,比如id=9,id=11,当采集到id=10的时候,URL是空白的,这样可能会导致采集到了空字段. 这里用到的一个技巧是数据库的查询语句,在我们采集完第一条数据的时候,判断数据库里是否还有大于此id的id编号,若有,读取一条,查询信息重复上面的工作. 具体

  • Node.js+jade+mongodb+mongoose实现爬虫分离入库与生成静态文件的方法

    接着这篇文章Node.js+jade抓取博客所有文章生成静态html文件的实例继续,在这篇文章中实现了采集与静态文件的生成,在实际的采集项目中, 应该是先入库再选择性的生成静态文件. 那么我选择的数据库是mongodb,为什么用这个数据库,因为这个数据库是基于集合,数据的操作基本是json,与dom模块cheerio具有非常大的亲和力,cheerio处理过滤出来的数据,可以直接插入mongodb,不需要经过任何的处理,非常的便捷,当然跟node.js的亲和力那就不用说了,更重要的是,性能很棒.这

  • batchcollect pagecollect来自官方杰奇jieqi定时采集配置方法参数详解第1/2页

    前言 要实现采集,默认方式是根据配置好的采集规则,在浏览器提交相应的参数即可完成后面的采集入库全部动作. 而实现定时采集,与人工在浏览器提交有些区别,主要分两大步骤: 一.编写采集的url和相关参数,访问这个url即可实现想要的采集模式.(这个url直接在浏览器提交同样可以实现采集) 二.把定时访问这个url的功能加到系统的定时任务里面,实现无人值守的定时采集. 具体实现方法请参考下面内容: 1.对采集配置文件的解释 任何一个采集都会用到两个采集配置文件(跟后台采集规则配置对应),都可以用文本编

  • 如何写ASP入库小偷程序

    现在网上流行的小偷程序比较多,有新闻类小偷,音乐小偷,下载小偷,那么它们是如何做的呢,下面我来做个简单介绍,希望对各位站长有所帮助. (一)原理 小偷程序实际上是通过了XML中的XMLHTTP组件调用其它网站上的网页.比如新闻小偷程序,很多都是调用了sina的新闻网页,并且对其中的html进行了一些替换,同时对广告也进行了过滤.用小偷程序的优点有:无须维护网站,因为小偷程序中的数据来自其他网站,它将随着该网站的更新而更新:可以节省服务器资源,一般小偷程序就几个文件,所有网页内容都是来自其他网站.

随机推荐