通过 URL 每页获取更多搜索结果

问题描述 投票:0回答:5

我一直在编写一个从网络搜索中提取数据的程序。为了获取更多数据,我理想情况下希望通过脚本为每个查询提取更多结果(假设 100 个左右)。

我的问题是,有没有办法修改 Google、Yahoo 或 Bing(按优先顺序)的 URL,以便我每次查询可以获得 10 个以上的结果?

对于 Google,附加

&num=99
曾经一度有效,但现在不再有效:( 我看到了类似的
&count=50
附加内容,但这在任何搜索引擎上都不起作用。

search-engine url-parameters
5个回答
15
投票

num=99
不适用于 Google 的原因是因为
num
参数的实际值未被使用,而是与允许值列表进行比较。

允许的值为 10、20、30、40、50 和 100。该字段的任何其他值都将被忽略。

对于 Bing,参数为

count=##
,其中 ## 可以是 1-100 之间的任何值。

对于 Yahoo,参数为

n=##
,其中 ## 可以是 1-100 之间的任何值。

在大多数情况下,仅当用户未在搜索引擎的搜索设置中指定要显示的搜索结果数量时,URL 参数才会起作用。否则,该 cookie 将优先。


3
投票

我不知道您使用的是什么编程语言,但总体思路是使用正确的 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
)和它的值(如上所示),您可以在通过等请求页面时发送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 使用什么。


2
投票

&n=100
添加到链接。获取包含 100 个结果的页面


1
投票
https://www.google.com/search?q=who+is+google&num=100

您仍然可以使用 URL 中的 num 参数来设置每页获取的结果数。


0
投票

本地存储www.google.com,setItem 'NR' : 'value' // 例如第422章 你想要的金额作为价值

© www.soinside.com 2019 - 2024. All rights reserved.