先说一下简单情况老大给了我一个任务,让我开发一个小工具,输入域名和搜索关键词,就可以查询出该域名在百度的第几页,第一个说白了就是查询网站的排名,我们主要做的医疗行业的竞价站,所以我们的网站一般都是推广的网站,那么这个排名就是推广区域的排名了刚开始做,很简单的一个想法,百度地址带上参数不久可以file_get_contents了嘛,但是百度远远比我想象的要复杂的多第一:https,file_get_content不能获取htts的网页,那么没办法,只能用curl了,这个问题我解决了。第二:百度搜索链接的参数问题,百度搜索的时候,参数太多太多了,简单起见,我就只加了一个参数wd(该参数表示搜索的关键词),当然还有很多关键词,网上查了一下,感觉加入我第一次搜索的的话,不知道带不带这个参数有没有用,或者有没有必要,但是测试了一下,比如ie=utf-8加上或者不加上,结果都是一样的,但是又担心某些参数加入不加的话,比如相关推荐的的部分又给我显示不一样,那样我就无法真实模拟了第三:相同关键词搜索两次,出现的相关推荐模块的内容竟然不一样,这个好理解,但是问题就出在这里了,假如我curl抓取的页面不和浏览器出现的结果一致的话(特制相关推荐部分),那么这个抓取就没有任何意义了,这个地方我搞不清楚是我哪个地方的问题,是curl的配置问题,还是百度参数的问题<?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),//搜索关键词
//'pn'=>10,//页码
'ie'=>'utf-8',//查询输入文字的编码(Input Encoding)缺省设置ie=gb2312,即为简体中文
'f'=>'8',//form:形式(1,3,8) 也许还有其他的,暂时发现就这3种,1:相关搜索,表示用户选择了搜索页面最下面的“相关搜索”中的某个关键词。;3下拉框搜索 表示用户输入一定的词语之后出现“联想词语”,用户最终用鼠标选择了某个关键词;或用键盘选择了某个关键词后直接按回车。;8用户自主搜索,表示用户直接点击“百度一下”按键(有bs变量时才出现f=8)
'rsv_bp'=>'0',//(0,1,2) 0是首页输入;1是顶部搜索输入;2是底部搜索输入
//'rsv_idx'=>'1',
'tn'=>'baidu',//提交搜索请求的来源站点
//'oq'=>'baidu',//指的是你在输入搜索词时,输入一半,选择了下拉框之前输入的词;oq= 指的是搜索词,只有当url地址出现rsp而非rsv_bp时,oq才指的是从搜索词跳转到相关搜索。
//'rsv_pq'=>'baidu',//是用来记录关键词和上一次搜素的关键词(相关关键词)的,需要解码
//'rsv_t'=>'baidu',
//'rsv_enter'=>'baidu',
'inputT'=>'1625',//从你打开百度主页,在对话框输入数据的时候开始计时,到你点击百度一下的时间计算。(只有在顶部搜索,首页搜索才会出现)。
//'rsv_sug3'=>'38',//键盘重复速度(Keyboard Repeat Speed)
//'rsv_sug1'=>'8',//搜索框提示次数
//'rsv_sug7'=>'100',
//'sug'=>'baidu',//这个参数只有在你修改下拉框文字时才会出现,指的是下拉框出现的关键词
//'rsv_n'=>'baidu', //其他输入搜索词方式,当用户使用键盘选择了下拉框提示词到搜索框中,觉得不满意,修改字符串后再执行搜索,百度将这种行为定义为 rsv_n=1,rsv_n=2,指的是从剪贴板粘贴搜索词。这只需要做一个试验就能证明,复制一段文字到百度搜索框内,百度一下就会出现 rsv_n=2。
//'rs_src'=>'1'//当用户按“百度一下”后会自动生成相关搜索,在相关搜索的源代码可以看到相关搜索_语义关联性和其他几个参数。 相关搜索_语义关联性参数值一般为0,即rs_src=0与原先查询字符串(original queryString)语义关联性较高。如果某个相关搜索候选词语义与原先查询字符串关联性较弱,则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 数组
*/
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请求设置
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // 从证书中检查SSL加密算法是否存在
//其他设置
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
// 执行
$content = curl_exec( $ch );
if ($content == FALSE) {
echo "error:" . curl_error ( $ch );die;
}
// 关闭
curl_close ( $ch );
file_put_contents('./test.html', $content);
echo $content;
//输出结果
// return $content;
}-------------------------------------------------------------------------------------------------------------------------------
目前暂无任何回答
- 0 回答
- 2 关注
- 2129 浏览
添加回答
举报
0/150
提交
取消