使用关键字以编程方式执行Google搜索

时间:2014-04-16 05:18:26

标签: php google-api google-search google-search-api

就像我们继续谷歌并通过关键字进行谷歌搜索一样。

我们可以进行这样的查询吗?像

http://www.google.com/search?q=cupertino+american+food

执行查询后,我们应该获取每个链接的所有搜索结果详细信息以存储在数据库中。

正如某些网站提供REST api访问权限一样,用户可以在查询中获得大量结果。

我还没有看到谷歌这样的事情。

4 个答案:

答案 0 :(得分:3)

无论您将使用何种技术,Google都会阻止您的IP进行类似机器人的搜索查询。并且不要尝试使用TOR代理,因为所有的IP都会被禁止或使用验证码进行挑战。

您必须使用Google API才能符合Google的T& C.结果也好得多了

https://developers.google.com/custom-search/json-api/v1/overview

如果您拥有自定义搜索引擎并且每天限制为100个查询,则API是免费的。如果您需要更多,则每1000次查询将收取5美元的费用

答案 1 :(得分:2)

@mahtOrz:好的,这里有一些粗略的代码可以将Json送回控制台。请注意,api基本搜索字符串与您拥有的字符串不同,即www.google.com/search?q=cupertino+american+food。您需要使用下面的Google API基本网址。你有APIkey和CxKey吗?如果没有,我也可以引导您完成这些步骤。

using System;
using System.Text;
using System.Net;
using System.IO;
using System.Web;

namespace GoogleSearchTest1
{
    class Program
    {
        //Google keys                                                   
        const string APIKey = "{your key here}";
        const string CSEKey = "{your key here}";
        //base url for the search query                                                 
        const string GoogleBaseURL = "https://www.googleapis.com/customsearch/v1?"; //per Google documentation

    public static void Main(string[] args)
    {
        string myQuery = "cupertino american food"; //put what you're searching for here
        string result = submitSearch(myQuery);
        Console.WriteLine(result);
        string dummy = Console.ReadLine();
    }
    public static string submitSearch(string myQuery)
    {
        try
        {    
            string final = string.Format(GoogleBaseURL+"key={0}&cx={1}&q={2}",
                HttpUtility.UrlEncode(APIKey),
                HttpUtility.UrlEncode(CSEKey),
                HttpUtility.UrlEncode(myQuery));
            final += "&alt=json";
            WebRequest myRequest = WebRequest.Create(final);
            HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
            Stream myStream = myResponse.GetResponseStream();
            StreamReader myReader = new StreamReader(myResponse.GetResponseStream(), System.Text.Encoding.UTF8);
            string result = myReader.ReadToEnd();
            myStream.Close();
            myReader.Close();
            myResponse.Close();
            return result;
        }
            catch (Exception e)
        {
            //debug statement       
        }           
        return null;
    }
}

}

答案 2 :(得分:1)

使用 cUrl 请求,与输出缓冲相结合

答案 3 :(得分:1)

@ user123:如果您可以使用C#,我可以提供一些提示吗? API步骤非常广泛。让我知道!