通过URL获取每页搜索结果

use*_*504 7 search-engine url-parameters

我一直在编写一个从网络搜索中提取数据的程序.为了获得更多数据,我希望通过脚本为每个查询提取更多结果(比方说100左右).

我的问题是,有没有办法修改Google,Yahoo或Bing的URL(按此顺序排列),这样每个查询可以获得10个以上的结果?

对于谷歌来说,追加&num=99曾经在某一点上工作但不再有效:​​(我看到了类似的追加,&count=50但在任何一个搜索引擎上也没有用.

Ste*_*eve 9

num=99对Google无效的原因是因为num未使用参数的实际值,而是将其与允许值列表进行比较.

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

对于Bing,参数是count=####可以是1-100的任何值.

对于Yahoo,参数是n=####可以是1-100的任何值.

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

  • 我只是用一些随机数测试它并且工作正常:http://www.bing.com/search?q = cats&count = 1 http://www.bing.com/search?q=cats&count=13 http:/ /www.bing.com/search?q=cats&count=75 (2认同)

Jay*_*com 3

我不知道您使用的是什么编程语言,但总体思路是使用正确的 cookie 设置加载 google 搜索页面(这就是在撰写本文时它们的存储方式)。

您可以在 Google Chrome 中设置并查看 cookie。为了避免不必要的 Cookie,请首先打开一个新的隐身窗口 ( Ctrl++ Shift) N,然后导航到搜索设置 ( https://www.google.com/preferences )。

在撰写本文时,您需要选中“从不显示即时结果”,然后将“每页结果”的滑块调整为您想要的任何值。点击底部的“保存”后,您现在可以通过打开开发人员控制台 ( Ctrl++ Shift)J并导航到资源选项卡来查看 cookie。

同样,在撰写本文时,Google 设置了两个变量NIDPREFPREF是我们感兴趣的改变搜索结果的方法。其外观示例:

ID=8155cce71859f7d0:U=fe6e69e174148b7b:FF=0:LD=en:NR=40:TM=1379366492:LM=1379366586:SG=2:S=FoybwBhek8noyp0t
Run Code Online (Sandbox Code Playgroud)

(此键可获取 40 个结果,如 所示NR=40

有了这个键(PREF)和它的值(如上所示),您可以在通过等请求页面时发送 cookie。在我最近与此相关的项目中,我将requests 库一起使用。

以下是关于如何获取包含 40 个结果的 Google 页面的片段(来自请求文档的修改示例):

ID=8155cce71859f7d0:U=fe6e69e174148b7b:FF=0:LD=en:NR=40:TM=1379366492:LM=1379366586:SG=2:S=FoybwBhek8noyp0t
Run Code Online (Sandbox Code Playgroud)

或者查看 wget/curl 的手册页。我知道 wget 指定了一个--load-cookies您可以使用的标志。

您可以将此应用到您需要从中获取内容的任何其他基于 Cookie 的网站。雅虎!使用基于 cookie 的设置 - 我不确定 Bing 使用什么。