教你把百度的關鍵字搜索偷過來用用。


話不多說,先上效果圖。

在線Demo查看

怎么樣,是不是和在用百度一下時,關鍵字搜索補全一樣一樣的。

今天下午沒什么事,打開百度首頁的Newwork看了一下,發現我每次輸入內容后,它都會把我們輸入的內容發送到后台,后台返回這些關鍵字的聯想條目,我們只需要把這些條目放到頁面中,就可以實現上圖所示的demo了。

下面我們就來看看怎么獲取這些內容。

先打開百度首頁,我是用的chrome瀏覽器,F12,選到Network(你可能發現Network中是空的,刷新一下頁面就好了):

看到一大堆請求過來的文件,下面我們要找到關鍵的文件,也就是我們輸入時,百度返回的文件,最快速的方法就是輸入一大堆的字母,這樣可以很方便的找到,我輸入了一大堆的ssssss.....:

看到這些返回的文件嗎,wd=ssssssssssss....,我們隨便雙擊一條,把彈出窗口中的Request URL里的網址復制下來,這個就是我們完成關鍵字搜索的請求路徑。

我們可以把網址直接復制到瀏覽器地址欄,看看得到的是個什么東西:

 1 jQuery110204129574971066774_1467359127325({
 2 "q": "哈哈是什么yisi",
 3 "p": true,
 4 "bs": "",
 5 "csor": "9",
 6 "g": [
 7 {
 8 "q": "哈哈是什么意思",
 9 "t": "n",
10 "st": {
11 "q": "哈哈是什么意思",
12 "new": 0
13 }
14 },
15 {
16 "q": "哈哈哈哈是什么意思",
17 "t": "n",
18 "st": {
19 "q": "哈哈哈哈是什么意思",
20 "new": 0
21 }
22 }
23 ],
24 "s": [
25 "哈哈是什么意思",
26 "哈哈哈哈是什么意思"
27 ]
28 });
點擊展開

 得到的數據是一個對象,不過對象被包裹在一個函數內,這個格式是不是很熟悉啊,對,就是jsonp!分析完這個數據格式,發現我們需要的是這個對象下的s數組里的數據,那我們就把s里的數據拿出來插入到頁面中就行了,開始吧!

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script type="text/javascript" src="js/jquery-2.1.0.js" ></script>
    </head>
    <body>
        <input type="text" onkeyup="require()" id="search"/>
        <div id="show"></div>
                <script>
                        //do something......
                </script>
    </body>
</html>    

這段html代碼很簡單,引入了jQuery,一個輸入框,一個承載返回內容的div,我么直接把script寫在body的最下面,當我么輸入時手指抬起,就去調用require函數,這個函數里就是我們的關鍵代碼。(大家可以想想為什么要用onkeyup,這是個坑)

 1 function require(){
 2     var search = $("#search").val();
 3     var _url = 'https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd='+search+'&json=1&p=3&sid=20144_1467_19033_20515_18240_17949_20388_20456_18133_17001_15202_11615&req=2&csor=2&pwd=s&cb=jQuery110207612423721154653_1467355506619&_=1467355506623';
 4     $.ajax({
 5         type:"get",
 6         url:_url,
 7         async:true,
 8         dataType:'jsonp',
 9         jsonpCallback:'jQuery110207612423721154653_1467355506619',
10         success:function(data){
11             console.log(data);
12             var list = data.s;
13             var str ="";
14             for(var i in list){
15                 str+='<p>'+list[i]+'</p>';
16             }
17             $("#show").html(str);
18         }
19     });
20 }

當require函數被觸發時,執行以上代碼,我們來分析一下上面的代碼。

先獲取到輸入框的內容,再定義一個_url,把我們之前得到的url地址附給這個變量,但是注意要把關鍵字的值改成輸入框內的值,這樣才能動態獲取,不然你一直都在請求一個固定的關鍵字(上面把_url中的search標紅加粗了)。

准備工作做好,可以發起ajax請求了,因為是jsonp的格式,所以要設置dataType:'jsonp',並告訴jQuery回調函數的名稱,這個名稱可以在瀏覽器中得到(之前在瀏覽器地址欄輸入url,得到的數據被包含在一個函數里,這里的jsonpCallback就寫那個函數的名稱,每個人的都不一樣)。

現在我們只需要把數據console.log出來,並解析到頁面上,就可以實現文章開頭的效果了,簡單吧!(記得放在服務器環境運行哦!)下面附上源碼:

點擊查看源碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM