我希望能够抓住关于N结果的#34;"任意Google搜索字词的数字。谷歌对刮刀相当耐用,所以虽然这可能是一个有点工作的选择,但我特别询问是否有更好的方法可以做到这一点?也许有一个由Google提供的预先存在的API可以满足这种需求吗?
答案 0 :(得分:1)
我不会尝试抓取,因为最有可能产生法律后果,但会使用Google Custom Search API。您需要API密钥和CX ID(这是您在Google帐户中设置的自定义搜索引擎的ID)
一旦您有权访问API和您的CX ID,就可以向cse.list方法提交查询,并在totalResults
下的回复中获取您要查找的号码。
设置和自定义自定义搜索引擎时,您必须定义要搜索的网站。幸运的是,您可以添加* .com,* .net等通配符。或者按照此页面上的说明搜索整个网络:https://support.google.com/customsearch/answer/2631040?hl=en
我已经包含了您需要在下面进行此操作所需的所有链接。拥有CX ID后,请尝试使用API列表资源管理器。它会为您提供实时响应数据,您可以查看并使用它。
Google自定义搜索API
https://developers.google.com/custom-search/
这是您想要使用的方法/终点:
https://developers.google.com/custom-search/json-api/v1/reference/cse/list
cse.list方法资源管理器:
https://developers.google.com/apis-explorer/#p/customsearch/v1/search.cse.list
设置和管理您的自定义搜索引擎
https://cse.google.com/cse/manage/all
注意:根据您配置搜索引擎的方式,结果可能会略有不同。我有一个测试设置来搜索整个网络,重点是* .com和* .net域名,我得到的数字比Google在"关于N结果"中显示的数字更大。我不确定你是否需要那个确切的数字,但他们将其描述为"关于"所以它无论如何都不能完全准确。关键是,通过CSE,您可以对如何配置它进行很多控制,并且您应该能够非常接近。
答案 1 :(得分:0)
假设您的自定义搜索API,您是否尝试从JSON响应正文中有条件地删除属性totalResults
?
你可以通过检查查询参数(比方说q)来实现这一点,
if(q.equals("your string")){
var keyName = "totalResults";
var resp = json_encode($response);
delete resp.queries.<APIkey>[keyName];
}
注意:找到keyName的结构:totalResults来自here