如何构建复杂的谷歌网络搜索查询?

10

通过使用Google搜索引擎在互联网上进行搜索是互联网用户的事实标准。Google提供了一个基本高级表单以准备查询字符串到其搜索引擎。假设对于不使用Web表单感兴趣,可以简单地通过构建在搜索条件上的查询字符串对特定URL进行HTTP get请求。

例如,我可以通过在以下位置进行HTTP请求来搜索包含单词“hello” 的结果:

http://www.google.com/search?q=hello

我可以添加另一个词,例如 "world",如下所示:

http://www.google.com/search?q=hello+world

你知道,通过指定以下好的参数可以使搜索变得更加“复杂”:

  • 或者条件
  • 精确短语
  • 搜索特定域名
  • 避免特定单词
  • 使用特定语言搜索
  • 限制地理区域搜索
  • 搜索文档类型
  • 等等。

如何修改查询字符串以考虑上述搜索参数?


我希望你知道,不使用网页表单而是爬取结果页面会违反谷歌的使用条款。 - Filburt
1
@Filburt 谢谢!你提醒了我!不过,我的问题是如何制作某个东西,而不是知道这是否违反了 Google 的条款!我正在测试一个原型。Google 已经能够保护自己免受我的侵害 :) - JeanValjean
5个回答

5
我仔细查看了Pratik ChowdhuryRobbie Vercammen的答案。他们提供了一个链接,其中列出了在Google搜索表单中使用的可能的文本过滤器列表。尽管这很有趣,但他们没有回答问题。因此,我认真研究了这个问题,并找到了以下解决方案。
假设您需要进行一次一次性HTTP调用(例如通过每月运行的PHP类来运行CRON),以便检索特定字符串查询的搜索结果,例如所有包含某些单词(即“hello”和“world”)的页面(即mywebsite.com),那么您可以对以下地址进行HTTP get调用:
http://www.google.com/search?q=hello+world+site:mywebsite.com

q参数可以包含整个搜索查询,但是Google定义了一个“dummy proof”参数列表。

请注意,AND运算符可以由as_q参数代替表示。

要获取页面结果中“hello”和“world”之间任意一个(即OR),必须将查询“q”参数更改为:

q=hello+OR+world

更紧凑的表示使用as_oq参数:

as_oq=hello+world

如果要查找确切的短语“hello world”,则q参数为:
q="hello+world"

另一种紧凑表示法使用as_epq参数:

as_epq=hello+world

如果想要查找不包含“hello”和“world”这两个词的所有结果,q 参数应为:

q=-hello+-world

另外一种紧凑的表示方法使用 as_eq 参数:

as_eq=hello+world

当然,as_qas_oqas_epqas_eq等可以像往常一样(即使用&字符)组合在一个独特的搜索查询中。因此,例如我可以搜索单词“hello”和“word”,加上“programming”和“code”之间的一个单词,如下所示:
q=hello+world&as_oq=programming+code

可以按以下方式搜索特定域名(再次,mydomain.com):

as_sitesearch=mydomain.com

然而,如果你想排除特定的域名(例如,因为它是垃圾邮件来源),你必须使用标准符号。例如:

q=hello+-site:mydomain.com

返回所有不在网站mydomain.com中的包含单词“hello”的页面。

要获取特定文件类型,例如pdf,您可以使用as_filetype

as_filetype=pdf

更复杂的搜索参数可以使用,如Google支持文档中提供的。 例如,要获取具有单词同义词的结果,只需在单词前面使用运算符,例如:
q=~hello

此外,如果您想使用通配符,例如获取所有以“hello”开头并以“world”结尾的确切短语,您应该使用*运算符:
q="hello+*+world"

这可能会返回类似于“hello to the world”和“hello sweet world”的内容。

您还可以使用以下关键字(阅读此处以获取更多详细信息)在页面标题或页面网址中搜索特定单词:

  • intitle
  • allintitle
  • inurl
  • allinurl

例如,以下内容将返回所有包含单词“hello”和“world”的网址页面:

q=allinurl:hello+world

对于Google GUI页面的语言(不是结果页面),需要将语言字符串(例如英语为en,法语为fr,意大利语为it等)插入到查询字符串中的hl参数中。换句话说,如果使用英文版的Google进行搜索,则查询字符串变为如下形式:

http://www.google.com/search?hl=en&q=hello+world+site:mywebsite.com

要选择特定的语言,例如意大利语,请使用lr查询参数:
lr=lang_it

使用cr参数,可以选择特定地理区域发布的页面。例如,要查找在意大利发布的所有页面:

cr=countryIT

2

为了创建复杂的and/or查询,您可以使用()OR

例如,如果我们想要搜索:

("tschakk buff" AND "boom bang") OR ("zata tong" AND "zong klirr")

查询语句应该是这样的:
https://www.google.com/search?q=("tschakk%20buff"%20"boom%20bang")%20OR%20("zata%20tong"%20"zong%20klirr")

1
尽管这本书的标题看起来危险,但如果您不滥用它,它将回答您所有的问题。
这本书的名字是《危险的谷歌-寻找秘密》,作者是Michał Piotrowski,出自hackin9杂志。
祝你好运。

1

我将进行测试。明天我会给你反馈!不管怎样,谢谢 :) - JeanValjean

1

Advangle 是一个不错的免费服务,您可以在其中通过可视化方式构建网页搜索查询,并将查询字符串(或链接到 Google 和 Bing 的 URL)作为结果。


抱歉,我尝试过了(它仍处于beta版本),但它并不能很好地工作!例如,它似乎支持多文件类型搜索,但在Google中查询返回的是q="help" filetype:pdf filetype:eps,结果却没有任何搜索结果,而正确的查询应该是q=help+filetype:pdf+OR+filetype:eps - JeanValjean
这不是错误。默认情况下,所有条件都是通过AND连接的。因此,您要求查找所有文件类型为EPS AND PDF的文档,这显然是不可能的。 如果您需要通过OR连接它们-请将根条件组的链接类型从“all”更改为“any”。 - DevGuy
链接已失效。 - ruohola

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接