|
技术核心组
 
E.S.T顾问团成员 技术顾问 - 帖子
- 197
- 精华
- 28
- 积分
- 5191
- 阅读权限
- 200
- 性别
- 男
- 来自
- 河南洛阳
- 在线时间
- 126 小时
- 注册时间
- 2004-11-21
- 最后登录
- 2008-4-6
|
楼主
大 中
小 发表于 2007-2-18 23:06 只看该作者
[原创]2007年春节礼物:不占用任何服务器资源的客户端baidu搜索小偷
献给所有EST的朋友们,祝大家新年愉快,万事如意。
文章作者:勇敢的风 [E.S.T顾问团] feng.cnblog.com.cn
信息来源:邪恶八进制信息安全团队(www.eviloctal.com)
很早之前我发表过一篇服务器版的( http://forum.eviloctal.com/read-htm-tid-21143-keyword-.html),在那个之前已经有这个了,只是没有发表出来,我们知道很多空间提供商禁用了xmlhttp组件使得他无法使用。
这些并没有什么特殊的技术含量,全部代码主要有3个函数,一个是utf8转换,一个是远程抓取,这两个函数是通用的,基本上所有的小偷程序都要用到,另外一个就是分析抓取的内容并进行整理,它主要使用正则表达式;有朋友提到美化,这次已经将结果分离为3个部分了,一个是页信息(pageinfo),一个是搜索信息(searchinfo),还有一个就是搜索结果(ubb名称的函数返回的本身变量),页信息和搜索信息都是2个,分别在顶部和底部,在搜索结果中函数中已经指明要美化的最关键的地方,自己可以直接修改。 引用:<Script language=VBScript>
'--------------------------------
'Baidu搜索小偷客户端版
'作者:勇敢的风
'Blog:http://feng.cnblog.com.cn
'使用或转载请保留这些信息
' Var VBScript 1.3
' 2006.12
'由于Baidu经常修改界面,该版仅适用于2006年12月之前的最后一次该版
'如搜索时出现错误或者提取的内容混乱则表示该版本寿命已用尽。
'--------------------------------
Function bytes2BSTR(vIn) 'utf8转换函数
strReturn = ""
For i = 1 To LenB(vIn)
ThisCharCode = AscB(MidB(vIn,i,1))
If ThisCharCode < &H80 Then
strReturn = strReturn & Chr(ThisCharCode)
Else
NextCharCode = AscB(MidB(vIn,i+1,1))
strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
i = i + 1
End If
Next
bytes2BSTR = ubb(strReturn)
End Function
Function dq(url)'远程抓取函数
dim XmlHttp
set XmlHttp = CreateObject("Microsoft.XMLHTTP")
XmlHttp.Open "GET",url, false
XmlHttp.setRequestHeader "Content-Type","text/XML"
XmlHttp.Send
dq = bytes2BSTR(XmlHttp.responseBody)
End Function
Function BR(Str)'叶面整理函数
Str = Replace(Str,"{br}","<br>")
Str = Replace(Str,vbcrlf,"<br>")
Str = Replace(Str,"<br> <br>","<br>")
Str = Replace(Str,"<br><br>","<br>")
Str = Replace(Str,"<br><br>","<br>")
BR = Str
End Function
function ubb(str)'整理过程
if instr(str,"找到相关网页") = 0 then
sminfo.innerHTML = "没有搜索到任何内容"
pageinfo1.innerHTML = ""
pageinfo2.innerHTML = pageinfo1.innerHTML
searchinfo1.innerHTML = ""
searchinfo2.innerHTML = searchinfo1.innerHTML
exit function
end if
str = Replace(str,vbcrlf,"{br}")
str = Replace(str,"<br>","{br}")
str = Replace(str,"</td>","</td>"&vbcrlf)
str = Replace(str,"<td",vbcrlf&"<td")
dim re,Match,Matches
set re = New RegExp
re.Global = True
re.IgnoreCase = True
re.Pattern=".*\<td class=f>(.*)\<\/td>" '集合有用的信息
Set Matches = re.Execute(str)
For Each Match in Matches
ubb=ubb&BR(Match.value)&"<br>" '这里的Match.value是单条信息内容,美化的时候这地方是关键
next
ubb = Replace(ubb,"<td class=f>","")
ubb = Replace(ubb,"</td>","")
re.Pattern="(\- \<a .[^\<]*>百度快照\<\/a> \<br>)" '去除快照
ubb = re.replace(ubb,"")
re.Pattern="(\- \<a .[^\<]*>推广\<\/a>\<br>)" '去除推广
ubb = re.replace(ubb,"") '这里是百度赚钱的地方,如果将这里除去,baidu会不满意的,建议将这一行改为
'ubb = re.replace(ubb,"baidu推广<br>")
re.Pattern="(\<a class=""m"".[^\<]*>.[^\<]*\<\/a>)"'去除域名即:更多结果
ubb = re.replace(ubb,"")
re.Pattern="(\<font color=#008000>.[^\<]*\<\/font>)" '去除地址、大小、时间
ubb = re.replace(ubb,"")
str = Replace(str,"</div>","</div>"&vbcrlf)
re.Pattern="\<div class=""p"">(.*)\<\/div>"
Set Matches = re.Execute(str)
set Match = Matches(0)
Dim TheLink
TheLink = Match
re.Pattern="href=s?(.[^>]*)"
TheLink = re.replace(TheLink,"href=# onclick=""dq('http://www.baidu.com/s?$1')""")
sminfo.innerHTML = ubb
pageinfo1.innerHTML = TheLink
pageinfo2.innerHTML = pageinfo1.innerHTML
re.Pattern="(找到相关网页.*秒)"
Set Matches = re.Execute(str)
set Match = Matches(0)
searchinfo1.innerHTML = Match
searchinfo2.innerHTML = searchinfo1.innerHTML
end function
</script>
<body onload="dq('http://www.baidu.com/s?wd=勇敢的风')">
<input type="text" name="key" id="key">
<input type="submit" onclick="dq('http://www.baidu.com/s?wd='+key.value)">
<div id="pageinfo1"></div>
<div id="searchinfo1"></div>
<table width="70%">
<tr>
<td><div id="sminfo"></div></td>
</tr>
</table>
<div id="pageinfo2"></div>
<div id="searchinfo2"></div> 以上为主要的代码,为了能实现连刷新都不占用服务器资源,可以在叶面中插入一下代码(F5键替换) 引用:<Script Language="Javascript">
document.onkeydown=function () //按F5紧刷新抓取内容,这样可以不再读服务器信息,
{
if(event.keyCode=='116')
{
event.keyCode=0;
event.returnValue=false;
sminfo.innerHTML=dq('http://www.baidu.com/s?wd='+key.value)
}
}
</Script> 说明:客户端浏览器只能是ie6以上的版本
另:没有检测客户端代码,有兴趣的朋友可以帮添加上.
风,有时静,有时猛
风,有时喜,有时恨
风,有时大,有时小
我,我是风,我爱风
我是风流的风
|