我一直在编写一个从网络搜索中提取数据的程序。为了获得更多数据,理想情况下,我希望通过脚本为每个查询提取更多结果(比如说 100 个左右)。
我的问题是,有没有办法修改 Google、Yahoo 或 Bing 的 URL(按此顺序优先),以便每次查询可以获得超过 10 个结果?
对于谷歌来说,附加&num=99
曾经在某个时候起作用,但不再起作用:(我看到了一个类似的附加,&count=50
但在任何搜索引擎上都不起作用。
我一直在编写一个从网络搜索中提取数据的程序。为了获得更多数据,理想情况下,我希望通过脚本为每个查询提取更多结果(比如说 100 个左右)。
我的问题是,有没有办法修改 Google、Yahoo 或 Bing 的 URL(按此顺序优先),以便每次查询可以获得超过 10 个结果?
对于谷歌来说,附加&num=99
曾经在某个时候起作用,但不再起作用:(我看到了一个类似的附加,&count=50
但在任何搜索引擎上都不起作用。
num=99
对 Google 不起作用的原因num
是没有使用参数的实际值,而是将其与允许值列表进行比较。
允许的值为10、20、30、40、50 和 100。此字段的任何其他值都将被忽略。
对于 Bing,参数是count=##
## 可以是 1-100 之间的任何值。
对于 Yahoo,参数是n=##
## 可以是 1-100 之间的任何值。
在大多数情况下,URL 参数仅在用户未指定要在搜索引擎的搜索设置中显示的搜索结果数量时才有效。否则,该 cookie 将优先。
我不知道您使用的是什么编程语言,但总体思路是使用正确的 cookie 设置加载 google 搜索页面(在撰写本文时它们是如何存储的)。
您可以在 Google Chrome 中设置并查看 cookie。为避免不必要的 cookie,首先打开一个新的隐身窗口 ( Ctrl++ Shift) N,然后导航到搜索设置 ( https://www.google.com/preferences )。
在撰写本文时,您需要选中“从不显示即时结果”,然后将“每页结果”的滑块调整为您想要的任何值。点击底部的“保存”后,您现在可以通过打开开发者控制台 ( Ctrl++ Shift)J并导航到资源选项卡来查看您的 cookie。
同样,在撰写本文时,Google 设置了两个变量,NID
并且PREF
. PREF
是我们有兴趣让搜索结果发生变化的那个。它可能是什么样子的一个例子:
ID=8155cce71859f7d0:U=fe6e69e174148b7b:FF=0:LD=en:NR=40:TM=1379366492:LM=1379366586:SG=2:S=FoybwBhek8noyp0t
(此键获取 40 个结果,如 所示NR=40
)
使用这个键 ( PREF
) 和它的值(如上所示),您可以在通过wget、curl等请求页面时发送 cookie。在我最近的与此相关的项目中,我使用的是带有requests 库的节点。
这是关于如何获取具有 40 个结果的 Google 页面的片段(来自请求文档的修改示例):
var j = request.jar();
var cookie = request.cookie('PREF=ID=8155cce71859f7d0:U=fe6e69e174148b7b:FF=0:LD=en:NR=40:TM=1379366492:LM=1379366586:SG=2:S=FoybwBhek8noyp0t');
j.add(cookie);
request({url: 'https://www.google.com/search', jar: j},
function(error, response, body) {
// do something with the body (html) of the page!
});
或者查看 wget / curl 的手册页。我知道 wget 指定了一个--load-cookies
您可以使用的标志。
您可以将此应用到您需要内容的任何其他基于 cookie 的网站。雅虎!使用基于 cookie 的设置 - 我不确定 Bing 使用什么。
添加&n=100
到链接。获取包含 100 个结果的页面
https://www.google.com/search?q=who+is+google&num=100
您仍然可以使用 URL 中的 num 参数来设置每页要获取的结果数。