帮你打造属于自己的搜索引擎---百度篇

想拥有属于自己的搜索引擎吗?采用目前流行的数据采集方法,你就可以立即拥有。下面就教你一步步地去实现。

一、认识百度搜索

百度搜索,全球最大中文搜索引擎,2005年8月5日在美国纳斯达克上市交易,目前是国内用户使用率最高的搜索引擎,提供网页、新闻、图片、音乐、地图等各种搜索

1、百度网页搜索的查询参数

必备参数

☆ wd--查询的关键词(Keyword)
☆ pn--显示结果的页数(Page Number)
☆ cl--搜索类型(Class),cl=3为网页搜索

可选参数
☆ rn--搜索结果显示条数(Record Number),取值范围在10--100条之间,缺省设置rn=10
☆ ie--查询输入文字的编码(Input Encoding),缺省设置ie=gb2312,即为简体中文
☆ tn--提交搜索请求的来源站点
几个有用的tn 
tn=baidulocal 表示百度站内搜索,返回的结果很干净,无广告干扰。比如,在百度站内搜索"快乐",看看返回结果是不是很清爽。
tn=baiducnnic 想把百度放在框架中吗?试试这个参数就可以了,是百度为Cnnic定制的

☆ si--在限定的域名中搜索,比如想在新浪的站内搜索可使用参数si=sina.com.cn,要使这个参数有效必须结合ct参数一起使用。

☆ ct--此参数的值一般是一串数字,估计应该是搜索请求的验证码

si和ct参数结合使用,比如在sina.com.cn中搜索"理想",可用:http://www.baidu.com/baidu?ie=utf-8&am ... n&cl=3&word=理想

☆ bs--上一次搜索的关键词(Before Search),估计与相关搜索有关

2、百度搜索结果页面结构

按源代码结构自上而下为:

搜索框
右侧的火爆地带固定排名
搜索结果
分页区
相关搜索
底部搜索框
版权区

其中"搜索结果、分页区"这两部分就是我们需要的有效数据,根据其代码结果可以发现其唯一的字符串标识,通过这个标识截取内容就可以了,具体看后面的代码。

二、核心函数--使用asp的xmlhttp组件

数据采集程序,俗称小偷程序,其核心部分就是这个xmlhttp组件,用xmlhttp采集数据有些老生常谈了,网上资料也不少,一般的采集代码都是

set http=Server.createobject("MSXML2.XMLHTTP") 
Http.open "GET",url,false '打开xmlhttp
Http.send() '发送请求
if Http.readystate<>4 then
exit function 
end if 
getHTTPPage=bytesToBSTR(Http.responseBody,"GB2312") '返回结果(一般是字节流),并将字节流转换为字符串
set http=nothing '释放xmlhttp

详细应用见下面的完整代码

三、完整代码(文件名:searchi_bd.asp)

<%
option explicit
Dim wd,pn
wd = Request("wd")
pn = Request.QueryString("pn")
'开始错误处理
On Error Resume Next
If Err.Number <> 0 Then
Response.Clear
'显示错误信息给用户 
Response.Write "<p align='center' ><font size=3> 出错了,请重新打开百度搜索.</font></p>"
end if
%>
<HTML>
<HEAD>
<TITLE>百度搜索--<%=wd%></TITLE>
</HEAD>
<STYLE type=text/css>
<!--
body,td{font-family:arial}
TD{FONT-SIZE:9pt;LINE-HEIGHT:18px}
.cred{color:#FF0000}
//-->
</STYLE>

<BODY leftmargin="0" topmargin="3" marginwidth="0" marginheight="0">
<table align="center" width="98%" cellspacing="0" cellpadding="0" border="0" bgcolor="#ffffff" >
<tr>
<form name="f1" method="post" action="searchi_bd.asp">
<td width=150 height=50>
你的LOGO
</td>
<td align="left">
<input name=wd size="40" maxlength="100" title="输入关键字,然后Let's Searching..." value="<%=wd%>">
<input type="submit" value=" 百度搜索 ">
</td></form></tr>
</table>
<%
Dim strUrl,strTmp_bd,strInfo,strPage,strPageSum_bd,strQtime_bd
Dim bNoResult_bd,regEx,patrn
'百度查询字符串
strUrl = "http://www.baidu.com/s?ie=gb2312&wd="&wd&am ... &pn&"&cl=3"
'开始采集
strTmp_bd = GetHTTPPage(strUrl)
If InStr(strtmp_bd,"未找到和您的查询")<>0 Then
bNoResult_bd=1
End If

'截取"搜索结果"部分的内容
strinfo = strCut(strTmp_bd,"<DIV id=ScriptDiv></DIV>","<br clear=all>",2)
patrn="</td></tr></table><br>"
Set regEx = New RegExp ' 建立正则表达式。
regEx.Pattern = patrn ' 设置模式。
regEx.IgnoreCase = true 
regEx.Global = false 
strinfo=regEx.replace(strinfo,"")

'截取"分页区"部分的内容
strPage = strCut(strTmp_bd,"<br clear=all>","<br>",2)
strPage = Replace(strPage,"href=s?","href=searchi_bd.asp?")
'结果数量与用时
strPageSum_bd=strCut(strtmp_bd,"找到相关网页约","篇",2)
if not IsNumeric(strPageSum_bd) then
strPageSum_bd=strCut(strtmp_bd,"找到相关网页","篇",2)
end if
strQtime_bd=strCut(strtmp_bd,"用时","秒",2)
Set strTmp_bd=nothing

%>
<!-- T1-Start -->
<table cellspacing=0 cellpadding=0 border=0 width=98% align="center">
<tr valign=center align=middle height=18>
<td width=1 bgcolor=#999999>

<td nowrap style="FONT-WEIGHT:bold;COLOR:#ffffff;BACKGROUND-COLOR:#0033cc" width=64>互联网</td>

<td align=right bgcolor=#eeeeee><nobr>找到符合<b><%=wd%></b>的相关网页<b><%=strPageSum_bd%></b>篇,用时<b><%=strQtime_bd%></b>秒</nobr> </td>
</tr>
<tr><td bgcolor=#999999 colspan=3 height=2></td></tr></table>
</td>
</tr>
</table>

<%
if wd="" then
Response.Write "<p align='center' ><font size=-1> 您好,请在搜索框中输入关键词.</font></p>"
elseif bNoResult_bd=1 then
Response.Write "<p align='center' ><font size=-1> 抱歉,未找到任何符合您查询条件的信息,请重新选择合适的关键词进行查询.</font></p>"
else
%>
<table width="98%" align="center" cellspacing="0" cellpadding="0" border="0">
<tr>
<td style=line-height:160% bgcolor="#ffffff" width="75%" valign=top><br>
<%=strinfo%>
</td>
<td width="25%" valign=top><br> 这是你发挥的空间! 
</td>
</tr>
</table>
<table width="98%" align="center" cellspacing="0" cellpadding="4" border="0">
<tr>
<td align="center">
<br><font size=3><%=strPage%></font>
</td>
</tr>
</table>
<%End If 
set strinfo=nothing

%>
<hr size="1" width="760" color="#0000ff">

<div align="center"><font size=-1>
程序更新请到这里<span class="cred">(知识分享论坛)</span>查看</font>
</div>
</BODY>
</HTML>

<%
'采集函数
Function getHTTPPage(url) 
On Error Resume Next
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 
Response.Write "<div align='center'><b>服务器获取文件内容出错</b></div>" 
Err.Clear
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

'截取字符串,1.包括前后字符串,2.不包括前后字符串
Function strCut(strContent,StartStr,EndStr,CutType)
Dim S1,S2
On Error Resume Next
select Case CutType
Case 1
S1 = InStr(strContent,StartStr)
S2 = InStr(S1,strContent,EndStr)+Len(EndStr)
Case 2
S1 = InStr(strContent,StartStr)+Len(StartStr)
S2 = InStr(S1,strContent,EndStr)
End select
If Err Then
strCute = "<p align='center' ><font size=-1>截取字符串出错.</font></p>"
Err.Clear
Exit Function
Else
strCut = Mid(strContent,S1,S2-S1)
End If
End Function

%>

把上面的代码Copy到记事本保存为searchi_bd.asp,就可以使用了。如果你要更改文件名,请同时把以下代码中蓝色标识部分改为你的文件名

strPage = Replace(strPage,"href=s?","href=searchi_bd.asp?")

几点说明:

1、百度搜索基本上没有什么反采集的措施,主要一点就是百度隔一段时间会更改返回结果页面的源代码,所以要经常观察百度的搜索结果页面,发现代码变动了,就将几处字符串标识改动一下。在反采集方面,百度比Google大度多了,目前还没发现由于频繁查询百度而出现暂时屏蔽来源站点IP的现象,而在Google查询中经常出现这个现象,如何解决就在下篇文章里谈一谈。

2、采集比较耗资源,搜索小偷程序一样,所以程序中尽量早点释放变量或对象。如果你的空间资源不多,建议就不要搞这些了。

3、有些人可能不愿意在自己做的搜索小偷中保留任何百度的功能连接,比如百度快照和站内搜索等功能。为此我在下载包中提供一个无百度任何连接的精简版,你可以根据需要使用,在本文中就不列出代码了,其实和完整版的差不多。

(0)

相关推荐

  • 帮你打造属于自己的搜索引擎---百度篇

    想拥有属于自己的搜索引擎吗?采用目前流行的数据采集方法,你就可以立即拥有.下面就教你一步步地去实现. 一.认识百度搜索 百度搜索,全球最大中文搜索引擎,2005年8月5日在美国纳斯达克上市交易,目前是国内用户使用率最高的搜索引擎,提供网页.新闻.图片.音乐.地图等各种搜索 1.百度网页搜索的查询参数 必备参数 ☆ wd--查询的关键词(Keyword) ☆ pn--显示结果的页数(Page Number) ☆ cl--搜索类型(Class),cl=3为网页搜索 可选参数 ☆ rn--搜索结果显示

  • 百度搜霸——带给你最全的信息高速搜索

    出处:onlinedown 责任编辑:borly 互联网这个信息的海洋,要从中找到自己需要的信息并非易事.一句话,冲浪也需要技巧,现在,一切只需要一个简单的工具就可以解决,下面为你隆重推出--百度搜霸. 百度搜霸是著名搜索引擎百度推出的一款为网友量身打造的信息查找公司,它主要功能包括: (1)搜索网页:输入关键字之后便能够在数亿网页中搜寻. (2)站内搜索:使用百度网页搜索引擎,在当前你所访问的网站内,查询输入的关键词. (3)MP3 搜索:能够在百度MP3搜索中搜索自己想要的歌曲. (4)歌词

  • 快速搭建python爬虫管理平台

    爬虫有多重要 对搜索引擎来说,爬虫不可或缺:对舆情公司来说,爬虫是基础:对 NLP来说,爬虫可以获取语料:对初创公司来说,爬虫可以获取初始内容.但是爬虫技术纷繁复杂,不同类型的抓取场景会运用到不同的技术.例如,简单的静态页面可以用 HTTP 请求+HTML 解析器直接搞定:一个动态页面需要用 Puppeteer 或 Selenium等自动化测试工具:有反爬的网站需要用到代理.打码等技术:等等.那么此时就需要一个成熟的爬虫管理平台,帮助企业或个人处理大量的爬虫类别. 理解什么是爬虫管理平台 定义

  • 举例剖析C++中引用的本质及引用作函数参数的使用

    引用的意义与本质 1)引用作为其它变量的别名而存在,因此在一些场合可以代替指针 2)引用相对于指针来说具有更好的可读性和实用性 引用本质思考: 思考.C++编译器背后做了什么工作? #include <iostream> using namespace std; int main() { int a = 10; // 单独定义的引用时,必须初始化:说明很像一个常量 int &b = a; // b是a的别名 b = 11; cout << "b--->&qu

  • 不可不知的Google搜索窍门

    用Google或雅虎(Yahoo)搜索简直就是小菜一碟.你只需键入一个词,几乎同时你就会看到许多与此相关的网页链接. 不过搜索结果通常和你想要的内容有些出入.如果搜索词含糊不清,那么就会出现更多的无关链接.如果你键入"chips",搜索引擎根本无从知道你是想找电脑晶片(computer chips),炸土豆片(potato chips)还是巧克力豆(chocolate chips).实际上,我几天前试著用Google搜索"chips"的时候,排在最前面的搜索结果竟然

  • 更新网站内容的几点经验

    网站内容是一个网站的生命力源泉,如果站长不懂得如何及时有效地去更新自己网站,我想这样的网站只能永远跟在别人后面,是做不大的.以前我也是经常去各个同类网站,只会见好的文章就抄来,还美其名曰:网海拾贝.以为这样我的网站就会大受欢迎,其实不然.事实上很长一段时间内,我的网站PW(Page Views )一直都很低,不到IP量的2.5倍.那要怎么样更新网站能够吸引浏览者访问更多页面并且留下来,下面结合我这一年多的经验讨论几点方法,一家之言,请勿见笑: 1,合理利用搜索引擎 百度我是比较喜欢的.百度搜索的

  • Android ADB超简单的安装教程(推荐)

    前言 在Android TV开发中,我们会和APP开发一样使用到真机测试,而adb是一个特别的存在,因为它可以轻松的帮我连接到安卓设备.adb全称为Andorid Debug Bridge.adb全称Android Debug Bridge,用于与Android设备进行交互. ADB是我们进行Android开发经常要用的调试工具,它的使用当然是我们Android开发者必须要掌握的. ADB安装方法: 方法一:下载ADB安装包进行安装(其实是我重要文件压缩放到百度网盘),这种方法适合那种不是安卓开

  • Python网络爬虫信息提取mooc代码实例

    实例一--爬取页面 import requests url="https//itemjd.com/2646846.html" try: r=requests.get(url) r.raise_for_status() r.encoding=r.apparent_encoding print(r.text[:1000]) except: print("爬取失败") 正常页面爬取 实例二--爬取页面 import requests url="https://w

  • Nuxt3项目搭建过程(Nuxt3+element-plus+scss详细步骤)

    目录 1. Nuxt3的安装 1.1. 安装新建Nuxt3 项目 1.2. Nuxt3的启动使用 1.3. Nuxt3 运行端口 2. element-plus的安装配置 2.1. 演示使用 3. scss安装和全局变量配置 3.1. 使用 3.2. 外部导入使用 3.3. 全局配置使用 4. 拓展:Corepack 自动装载 pnpm 小聊: 本次记录一次使用Nuxt3搭建前端项目的过程,内容包含Nuxt3的安装,基于Vite脚手架(默认)构建的vue3项目,element-plus的安装配置

  • javascript的理解及经典案例分析

    js的简介: JavaScript是一种能让你的网页更加生动活泼的程式语言,也是目前网页中设计中最容易学又最方便的语言. 你可以利用JavaScript轻易的做出亲切的欢迎讯息.漂亮的数字钟.有广告效果的跑马灯及简易的选举,还可以显示浏览器停留的时间.让这些特殊效果提高网页的可观性. javascript现在可以再网页上做很多很多事情,网页特效,操作dom,html5游戏(基于html5和JavaScript的结合),动画等等特效,还可以实现拉去后台数据(通过ajax),不仅可以做前台还可以做后

随机推荐