【问题标题】:Request Google Search results with Javascript/PHP使用 Javascript/PHP 请求 Google 搜索结果
【发布时间】:2011-06-16 01:02:31
【问题描述】:

我想用 Google 搜索提供的结果列表来补充我的网络服务。我的目标是通过指定一些关键字和一些其他信息(例如数据范围)来接收前 10-20 个结果。

我有什么可能性?这甚至只能通过使用像Javascript这样的客户端技术来实现吗?还是我最终必须依赖动态加载的 PHP 脚本,该脚本使用 cURL 加载和分析 HTML 代码?

【问题讨论】:

    标签: javascript php search


    【解决方案1】:

    这就是我过去使用 cURL 请求和 Google AJAX API 的方式:

    function getResults($term,$page = 0){
        $googleurl = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=".(str_replace(' ','+',$term);
        if($page >0){
            $googleurl .= "&start=".($page*10);
        }
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL,$googleurl);   
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $Page_Contents = curl_exec($ch);
        curl_close($ch);
        return $Page_Contents;
    }
    $keywordCheck = array('ajax','php','cURL','other search terms');
    
    foreach($keywordCheck as $wordKey => $wordValue){
        $term = str_replace(' ','+',$wordValue);
        for($i =0; $i < 5; $i++){
            $page = getResults($term,$i);
            if(preg_match("/mysite.com/",$page)){
                $links = explode('GsearchResultClass',$page);
                foreach ($links as $key => $value){
                    if(preg_match("/mysite.com/",$value)){
                        preg_match("/url\":\"([^\"]*)\",/",$value,$match);
                        $match = str_replace('",','',str_replace('url":"','',$match[0]));
                        $results[$wordValue] .= $wordValue. ' is ranked #'.(($i*10)+($key)).': '.$match.'<br/>';
                    }
                }
            }
        }
        sleep(2);
    }
    

    然后在页面正文中:

    <div id="results">
        <?php foreach($results as $key => $value){
            if($value == ''){
                echo '<p>'.$key.' not found in top 50 results</p>';
        }
        else{
            echo '<p>'.$value.'</p>';
        }
        }?>
    </div>
    

    需要理解的几点:

    1) 使用 sleep() 在查询之间暂停以避免因服务器负担过重而被禁止

    2) 上次我检查时,搜索 api 将您限制为每天 1000 次查询,因此请做好相应计划

    3) API 查询与 www.google.com 不同的数据库,因此结果可能与您进行正常搜索时看到的略有不同

    此脚本仅检查我的网址在某些关键字上的位置我想监控前 50 个结果中的位置...显然,如果您不专注于 1 个站点,则需要进行调整.. .

    要添加自定义过滤器,只需执行“高级”搜索并查看查询字符串,API 也是如此。只需根据需要附加,例如 2011 年 1 月 1 日 - 2011 年 1 月 24 日的日期范围:

    $googleurl .= '&tbs=cdr%3A1%2Ccd_min%3A1%2F4%2F2011%2Ccd_max%3A1%2F24%2F2011';
    

    【讨论】:

    • 感谢您的脚本。但是有没有办法通过客户端编程语言来模拟用户搜索请求,从而使它看起来像是用户自己发出请求而不是服务器?还是同源政策会阻止这种努力?
    • 您可以使用 JavaScript 将客户端重定向到特制的谷歌搜索结果 url,但是任何类型的 AJAX 类型的请求都需要 cURL 或其他跨域请求方法。除非您从浏览器中添加用户代理字符串,否则许多 Google 服务将拒绝来自 cURL 调用的请求……但请注意,如果 Google 发现它们可能会禁止您……您到底想用客户端 google 做什么搜索结果?
    【解决方案2】:

    您想查看他们的JSON search API(这是他们更大的custom search API 的一部分)。该页面上的示例是用 javascript 编写的,但您也可以轻松地在 php 中实现它。

    【讨论】:

    • 谢谢。我会试试看!
    • @Max:请注意,请注意使用“自定义搜索 API”,而不是“Google Web Search API”,它最近已被弃用,现在只能保留 3 年。谷歌搜索一下,您可能会从旧版本中获得一些代码示例。
    猜你喜欢
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-12
    • 2011-03-27
    • 1970-01-01
    相关资源
    最近更新 更多