我想写JAVA代码从谷歌得到答案。我写的代码只用英语就可以了,但是当我尝试添加一些希伯来语字符时,我得到的答案与我在谷歌网站上写的答案不同。
下面是代码:
String address = "https://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=";
String charset = "UTF-8";
URL url;
try
{
url = new URL(address + URLEncoder.encode(artistAndSong + site, charset));
//The url seems right, and it's the same as the url that appear on the web
Reader reader = new InputStreamReader(url.openStream(), charset);
GoogleResults results = new Gson().fromJson(reader, GoogleResults.class);
res =(results.getResponseData().getResults().get(0).getUrl());
//This is the part where I see that the answers are not the same
}
class GoogleResults{
private ResponseData responseData;
public ResponseData getResponseData() { return responseData; }
public void setResponseData(ResponseData responseData) { this.responseData = responseData; }
public String toString() { return "ResponseData[" + responseData + "]"; }
static class ResponseData {
private List<Result> results;
public List<Result> getResults() { return results; }
public void setResults(List<Result> results) { this.results = results; }
public String toString() { return "Results[" + results + "]"; }
}
static class Result {
private String url;
private String title;
public String getUrl() { return url; }
public String getTitle() { return title; }
public void setUrl(String url) { this.url = url; }
public void setTitle(String title) { this.title = title; }
public String toString() { return "Result[url:" + url +",title:" + title + "]"; }
}
}
有人有主意吗?我已经试着解决这个问题好几天了……(另外,我试着玩unicode,但它似乎没有解决它…)
谢谢!
Google答案是基于你以前的搜索而个性化的。当你登录你的账户时,试着搜索同样的东西,当你没有登录(尝试隐身窗口,如果你使用Chrome浏览器为例),结果应该有所不同。
我想这就是发生在你身上的事。
你的代码中没有明显的缺陷。
您可能会遇到以下一种或多种情况:
- 正如@darijan所说:当你登录或不登录
- Cookies是否已经存在
- 可能是某种UserAgent歧视
- 由于谷歌正在逐步升级他们的算法,我们可以想象搜索API不会使用与网站完全相同的版本。
Google Api获取的结果与Google网站检索的结果非常不同。这就是俗称的"SEO世界"。这是非常可悲的,因为这是人们在SEO工作编写自己的爬虫的主要原因。这些程序对谷歌网站而不是谷歌Api进行查询。你在谷歌搜索网站上见过captcha
吗?你是否曾经被谷歌搜索网站屏蔽过,它的信息是"我们检测到你的网络有自动流量。请与您的互联网服务提供商联系。"如果谷歌在网站和api上获得相同的结果,那么SEO公司就会停止欺骗他们的网站来获得正确的结果。
所以答案是There is no bug in your code - this is Google's fault.