先說一下簡單情況老大給了我一個任務(wù),讓我開發(fā)一個小工具,輸入域名和搜索關(guān)鍵詞,就可以查詢出該域名在百度的第幾頁,第一個說白了就是查詢網(wǎng)站的排名,我們主要做的醫(yī)療行業(yè)的競價(jià)站,所以我們的網(wǎng)站一般都是推廣的網(wǎng)站,那么這個排名就是推廣區(qū)域的排名了剛開始做,很簡單的一個想法,百度地址帶上參數(shù)不久可以file_get_contents了嘛,但是百度遠(yuǎn)遠(yuǎn)比我想象的要復(fù)雜的多第一:https,file_get_content不能獲取htts的網(wǎng)頁,那么沒辦法,只能用curl了,這個問題我解決了。第二:百度搜索鏈接的參數(shù)問題,百度搜索的時候,參數(shù)太多太多了,簡單起見,我就只加了一個參數(shù)wd(該參數(shù)表示搜索的關(guān)鍵詞),當(dāng)然還有很多關(guān)鍵詞,網(wǎng)上查了一下,感覺加入我第一次搜索的的話,不知道帶不帶這個參數(shù)有沒有用,或者有沒有必要,但是測試了一下,比如ie=utf-8加上或者不加上,結(jié)果都是一樣的,但是又擔(dān)心某些參數(shù)加入不加的話,比如相關(guān)推薦的的部分又給我顯示不一樣,那樣我就無法真實(shí)模擬了第三:相同關(guān)鍵詞搜索兩次,出現(xiàn)的相關(guān)推薦模塊的內(nèi)容竟然不一樣,這個好理解,但是問題就出在這里了,假如我curl抓取的頁面不和瀏覽器出現(xiàn)的結(jié)果一致的話(特制相關(guān)推薦部分),那么這個抓取就沒有任何意義了,這個地方我搞不清楚是我哪個地方的問題,是curl的配置問題,還是百度參數(shù)的問題<?php
//https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=0&rsv_idx=1&tn=baidu&wd=%E4%B8%8D%E5%AD%95%E4%B8%8D%E8%82%B2&rsv_pq=bb089c9f00001428&rsv_t=1d5eARXSTXIoi6snu5z3c1ZApR0ixj%2BQMeVimrCU1A3rMWZfYpH8AePsP38&rsv_enter=1&rsv_sug3=1&rsv_sug1=1&rsv_sug7=001&rsv_sug2=1&rsp=0&rsv_sug9=es_1_1&rsv_sug4=3591&rsv_sug=5
$url='https://www.baidu.com/s';
$wd=$_GET['wd'];
$params=array(
'wd'=>urlencode($wd),//搜索關(guān)鍵詞
//'pn'=>10,//頁碼
'ie'=>'utf-8',//查詢輸入文字的編碼(Input?Encoding)缺省設(shè)置ie=gb2312,即為簡體中文?
'f'=>'8',//form:形式(1,3,8)?也許還有其他的,暫時發(fā)現(xiàn)就這3種,1:相關(guān)搜索,表示用戶選擇了搜索頁面最下面的“相關(guān)搜索”中的某個關(guān)鍵詞。;3下拉框搜索?表示用戶輸入一定的詞語之后出現(xiàn)“聯(lián)想詞語”,用戶最終用鼠標(biāo)選擇了某個關(guān)鍵詞;或用鍵盤選擇了某個關(guān)鍵詞后直接按回車。;8用戶自主搜索,表示用戶直接點(diǎn)擊“百度一下”按鍵(有bs變量時才出現(xiàn)f=8)
'rsv_bp'=>'0',//(0,1,2)?0是首頁輸入;1是頂部搜索輸入;2是底部搜索輸入
//'rsv_idx'=>'1',
'tn'=>'baidu',//提交搜索請求的來源站點(diǎn)
//'oq'=>'baidu',//指的是你在輸入搜索詞時,輸入一半,選擇了下拉框之前輸入的詞;oq=?指的是搜索詞,只有當(dāng)url地址出現(xiàn)rsp而非rsv_bp時,oq才指的是從搜索詞跳轉(zhuǎn)到相關(guān)搜索。
//'rsv_pq'=>'baidu',//是用來記錄關(guān)鍵詞和上一次搜素的關(guān)鍵詞(相關(guān)關(guān)鍵詞)的,需要解碼
//'rsv_t'=>'baidu',
//'rsv_enter'=>'baidu',
'inputT'=>'1625',//從你打開百度主頁,在對話框輸入數(shù)據(jù)的時候開始計(jì)時,到你點(diǎn)擊百度一下的時間計(jì)算。(只有在頂部搜索,首頁搜索才會出現(xiàn))。
//'rsv_sug3'=>'38',//鍵盤重復(fù)速度(Keyboard?Repeat?Speed)
//'rsv_sug1'=>'8',//搜索框提示次數(shù)
//'rsv_sug7'=>'100',
//'sug'=>'baidu',//這個參數(shù)只有在你修改下拉框文字時才會出現(xiàn),指的是下拉框出現(xiàn)的關(guān)鍵詞
//'rsv_n'=>'baidu',?//其他輸入搜索詞方式,當(dāng)用戶使用鍵盤選擇了下拉框提示詞到搜索框中,覺得不滿意,修改字符串后再執(zhí)行搜索,百度將這種行為定義為?rsv_n=1,rsv_n=2,指的是從剪貼板粘貼搜索詞。這只需要做一個試驗(yàn)就能證明,復(fù)制一段文字到百度搜索框內(nèi),百度一下就會出現(xiàn)?rsv_n=2。
//'rs_src'=>'1'//當(dāng)用戶按“百度一下”后會自動生成相關(guān)搜索,在相關(guān)搜索的源代碼可以看到相關(guān)搜索_語義關(guān)聯(lián)性和其他幾個參數(shù)。?相關(guān)搜索_語義關(guān)聯(lián)性參數(shù)值一般為0,即rs_src=0與原先查詢字符串(original?queryString)語義關(guān)聯(lián)性較高。如果某個相關(guān)搜索候選詞語義與原先查詢字符串關(guān)聯(lián)性較弱,則rs_src=1
);
$url=combine($url,?$params);
//?echo?$url;die;
//?curl_get($url);
$data=file_get_contents($url);
file_put_contents('./test.html',?$data);
/**
?*?url地址拼裝
?*?@param?unknown?$url
?*?@param?unknown?$data?數(shù)組
?*/
function?combine($url,$data){
$url.='?';
foreach?($data?as?$k=>$v){
$url.=$k.'='.$v.'&';
}
$url=substr($url,?0,strlen($url)-1);
return?$url;
}
function?curl_get($url){
$header?=?array?(
'User-Agent:?Mozilla/5.0?(Windows?NT?6.1;?WOW64;?rv:45.0)?Gecko/20100101?Firefox/45.0',
'Accept:*/*',
/*?'Accept-Encoding:gzip,?deflate,?br',
'Accept-Language:zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
'Connection:keep-alive',
'Cookie:BAIDUID=D963BAAC8134E09989C87C1BA53BE726:FG=1;?BIDUPSID=B5BFB24A611030ECBA2E73C8B9976324;?PSTM=1460431806
;?BD_HOME=0;?H_PS_PSSID=18881_18285_1435_19671_19689_18205_19559_15155_12056;?BD_UPN=13314352;?BD_CK_SAM
=1;?H_PS_645EC=475ctRGJAEDm9wQj7gwZ2Bs7lbtKugCUBJL1dO97qCJJn2ckA7QZmo2%2BrTw;?__bsi=1508149924235386
3151_00_0_I_R_152_0303_C02F_N_I_I_0',
'X-Requested-With:?XMLHttpRequest',
'is_xhr:?1',?*/
);
$ch?=?curl_init();
curl_setopt?(?$ch,?CURLOPT_URL,?$url);
curl_setopt?(?$ch,?CURLOPT_HTTPHEADER,?$header?);
curl_setopt?(?$ch,?CURLOPT_RETURNTRANSFER,?0?);
//https請求設(shè)置
curl_setopt($ch,?CURLOPT_SSL_VERIFYPEER,?false);?//?跳過證書檢查
curl_setopt($ch,?CURLOPT_SSL_VERIFYHOST,?2);?//?從證書中檢查SSL加密算法是否存在
//其他設(shè)置
curl_setopt($ch,?CURLOPT_HTTP_VERSION,?CURL_HTTP_VERSION_1_0);
//?執(zhí)行
$content?=?curl_exec(?$ch?);
if?($content?==?FALSE)?{
echo?"error:"?.?curl_error?(?$ch?);die;
}
//?關(guān)閉
curl_close?(?$ch?);
file_put_contents('./test.html',?$content);
echo?$content;
//輸出結(jié)果
//? return?$content;
}-------------------------------------------------------------------------------------------------------------------------------
- 0 回答
- 2 關(guān)注
- 2217 瀏覽
添加回答
舉報(bào)
0/150
提交
取消