0

我正在尝试创建一个 Windows 服务。服务的目的是从数据库中获取 url 并从谷歌检查它们的页面排名。目的是抓住任何人伪造他们的页面排名。我在http://www.codeproject.com/KB/aspnet/Google_Pagerank.aspx找到了一些代码并使用了它。

现在这里是代码

  public static int GetPageRank()
    {

        string file = "http://toolbarqueries.google.com/search?q=info:codeproject.com";
        try
        {
            //Request PR from Google



            WebRequest request = WebRequest.Create(file);
            WebResponse response = request.GetResponse();

            StreamReader reader = new StreamReader(response.GetResponseStream());
            string data = reader.ReadToEnd();

            reader.Close();
            response.Close();

            //Parse PR from string
            int pageRank = -1;
            if (data.IndexOf(':') != -1)
            {
                data = data.Substring(data.LastIndexOf(':') + 1);
            }

            int.TryParse(data, out pageRank);

            return pageRank;
        }
        catch (Exception ex)
        {

            MessageBox.Show(ex.Message);
            return -1;
        }
    }

现在发生的事情是,当在尝试 100 次之后调用此方法时,我开始出现以下异常。“远程服务器返回错误:(503) 服务器不可用”。我已经做了一些研究,并且我也看到了有关堆栈溢出的相关问题。显然,如果其中许多请求来自同一个 IP,谷歌就会停止服务请求。是否有任何解决方法可以让我在两个小时或三个小时内检查数千个页面排名。

4

2 回答 2

0

是否有任何解决方法可以让我在两个小时或三个小时内检查数千个页面排名[?]

没有。您只是在请求太多数据。可能有一个 JSON 或 XML API 来获取批量响应,但我不知道来自 Google 的任何 API。

于 2011-03-31T15:29:11.120 回答
0

最后,我们所做的是从代理提供商处获取代理并使用它们。必须使用信号量,以便为所有线程分配一个新代理,同时确保每分钟使用代理不超过 3 次,并且代理以循环顺序方式轮换。没有其他解决方法。

于 2011-12-16T11:31:09.317 回答