用php抓取google关键词排名

说下思路,利用PHP的curl函数储存cookie,google搜索页面是无法用file_get_connents打开的,必须要完全模拟浏览器才行,百度就不同了,直接用file_get_conntens抓取页面,然后用正则处理下就行了,这里就不列举百度了。code如下,有问题请联系我

 

  
  
  
  
  1. <?php  
  2. header("Content-Type: text/html;charset=utf-8");  
  3.  
  4. function ggsearch($url_s$keyword$page = 1) {  
  5.         $enKeyword = urlencode($keyword);  
  6.  
  7.         $rsState = false;  
  8.  
  9.         $page_num = ($page -1) * 10;  
  10.  
  11.  
  12.         if ($page <= 10) {  
  13.                 $interface = "eth0:" . rand(1, 4); //避免GG封IP  
  14.                 $cookie_file = dirname(__FILE__) . "/temp/google.txt"//存储cookie值  
  15.                 $url = "http://www.google.com/search?q=$enKeyword&hl=en&prmd=imvns&ei=JPnJTvLFI8HlggeXwbRl&start=$page_num&sa=N";  
  16.                 $ch = curl_init();  
  17.  
  18.                 curl_setopt($ch, CURLOPT_URL, $url);  
  19.  
  20.                 //curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);//获取浏览器类型  
  21.                 curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 GTB5");  
  22.                 curl_setopt($ch, CURLOPT_INTERFACE, "$interface"); //指定访问IP地址  
  23.                 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
  24.  
  25.                 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);  
  26.  
  27.                 curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);  
  28.  
  29.                 $contents = curl_exec($ch);  
  30.  
  31.                 curl_close($ch);  
  32.  
  33.                 $match = "!<div\s*id=\"search\">(.*)</div>\s+<\!--z-->!";  
  34.                 preg_match_all("$match""$contents"$line);  
  35.                 while (list ($k$v) = each($line[0])) {  
  36.                         preg_match_all("!<h3\s+class=\"r\"><a[^>]+>(.*?)</a>!"$v$title);  
  37.                         $num = count($title[1]);  
  38.                         for ($i = 0; $i < $num$i++) {  
  39.                                 if (strstr($title[0][$i], $url_s)) {  
  40.                                         $rsState = true;  
  41.                                         $j = $i +1;  
  42.                                         $sum = $j + (($page) * 10 - 10);  
  43.                                         //echo $contents;  
  44.                                         echo "关键字" . $keyword . "<br>" . "排名:" . '<font color="red" size="20" style="">' . $sum . '</font>' . "####" . "第" . '<font color="#00FFFF" size="18" style="">'.$page . '</font>'" 页" . "第" .'<font color="#8000FF" size="15" style="">'.$j . '</font>'"名" . $title[0][$i] . "<br>";  
  45.                                         echo "<a href='" . $url . "'>" . "点击搜索结果" . "</a>" . "<br>";  
  46.                                         echo "<hr>";  
  47.                                         break;  
  48.                                 }  
  49.                         }  
  50.                 }  
  51.                 unset ($contents);  
  52.                 if ($rsState === false) {  
  53.                         ggsearch($url_s$keyword, ++ $page); //找不到搜索页面的继续往下搜索  
  54.  
  55.                 }  
  56.         } else {  
  57.  
  58.                 echo '关键字' . $keyword . '10页之内没有该网站排名' . '<br>';  
  59.                 echo "<hr>";  
  60.         }  
  61. }  
  62. if (!emptyempty ($_POST['submit'])) {  
  63.  
  64.         $time = explode(' ', microtime());  
  65.         $start = $time[0] + $time[1];  
  66.         $more_key = trim($_POST['textarea']);  
  67.         $url_s = trim($_POST['url']);  
  68.         if (!emptyempty ($more_key) && !emptyempty ($url_s)) {  
  69.                 /*判断输入字符的规律*/ 
  70.                 if (strstr($more_key"\n")) {  
  71.                         $exkey = explode("\n"$more_key);  
  72.                 }  
  73.                 if(strstr($more_key"|")) {  
  74.                         $exkey = explode("|"$more_key);  
  75.                 }  
  76.                 if(!strstr($more_key"\n")&&!strstr($more_key"|")){  
  77.                 $exkey=array($more_key);  
  78.                 }  
  79.  /*判断是否有www或者http://之类的东西*/ 
  80.                 if (count(explode('.'$url_s)) <= 2) {  
  81.  
  82.                         $url = ltrim($url_s'http://www');  
  83.                         $url = 'www.' . $url_s;  
  84.                 }  
  85.                 foreach ($exkey as $keyword) {  
  86.                         //$keyword;  
  87.                         ggsearch($url_s$keyword);  
  88.                 }  
  89.                 $endtime = explode(' ', microtime());  
  90.  
  91.                 $end = $endtime[0] + $endtime[1];  
  92.  
  93.                 echo '<hr>';  
  94.                 echo '程序运行时间: ';  
  95.                 echo $end - $start;  
  96.                 //die();  
  97.         }  
  98. }  
  99. ?>  
  100. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  101. <html xmlns="http://www.w3.org/1999/xhtml">  
  102. <head>  
  103. <title>抓取排名</title>  
  104.  
  105. </head>  
  106.  
  107. <body>  
  108. <form action="" method="post">  
  109.  
  110.  
  111.                         <span>关键字:</span> <textarea name="textarea" rows="20" cols="40" wrap="off">  
  112. 格式例如:keyword1|keyword2|keyword3  
  113.   或者:      keyword1  
  114.           keyword2  
  115.           keyword3  
  116.   </textarea>  
  117.  
  118.  
  119.                         <span>url地址:</span><input type="text" name="url">  
  120.  
  121.                         <input type="submit" name="submit" value="搜索">  
  122.  
  123.  
  124. </form>  
  125. </body>  
  126. </html>  
说明下,此代码只支持英文关键词,中文关键词自己改下代码就行了

 

本文出自 “mcshell学习博客” 博客,转载请与作者联系!

你可能感兴趣的:(PHP,curl,抓取google关键词排名)