2009-06-02 156 views
17

这可能是一个愚蠢的问题,但是有可能捕获用户输入到Google搜索框中的内容,以便将其用于在我的网站的着陆页上生成动态页面?是否可以从Google搜索中捕获搜索词?

例如,假设某人在Google上搜索“热狗”,并且我的网站成为搜索结果链接之一。如果用户点击指向他们到我的网站的链接,是否有可能以某种方式知道或捕获Google搜索框中的“热狗”文本,以便我可以调用脚本来搜索我的本地数据库中的内容相关的热狗,然后显示那个?对我来说这似乎完全不可能,但我不知道。谢谢。

+1

请注意,推荐人可能被伪造或完全阻止在客户的心血来潮。 – Powerlord 2009-06-02 19:43:00

+1

只是一个说明,因为你是新的:不要太快接受第一个答案。只是因为它有1 upvote,并不意味着它的权利 – TStamper 2009-06-02 19:44:42

+0

@TStamper:好点,谢谢你的提示。我多快得到答案时非常兴奋。 – johnnyb10 2009-06-02 20:10:21

回答

13

是的,这是可能的。请参阅HTTP标头Referer。 Referer标题将包含Google搜索结果页面的URL。

当用户点击谷歌搜索结果页面上的链接时,浏览器将让您的网站的请求用这种HTTP标头:

Referer: http://www.google.fi/search?hl=en&q=http+header+referer&btnG=Google-search&meta=&aq=f&oq= 

刚刚从请求头解析URL,使用的搜索词由用户将在q-参数。上例中使用的搜索词是“http header referer”。

同样的方法通常也适用于其他搜索引擎,它们在Referer头部中只有不同类型的URL。

这个answer显示了如何在PHP中实现这个。


Referer标头仅适用于HTTP 1.1,但它涵盖了几乎所有的现代浏览器。浏览器也可能伪造Referer头部或者头部可能完全丢失,所以不要根据Referer头部做出过于严重的偏见。

+3

除此之外,为了让您的网页在搜索结果中出现,它已经需要有相关内容 – kdgregory 2009-06-02 19:42:37

+6

由于2011年下半年谷歌安全性变更,当由已登录的Google用户执行搜索时,不再可能:http://googleblog.blogspot.com/2011/10/making-search-more-secure.html和http ://analytics.blogspot.com/2011/10/making-search-more-secure-accessing.html – 2012-01-22 20:35:52

1

是的,它来自于网址:

http://www.google.com/search?hl=es&q=hot+dog&lr=&aq=f&oq=

这里有一个例子:

谷歌发送许多游客到您的网站,如果你想获得他们常来的关键字 到您的网站,或许可以通过在页面上显示 来打动他们,或者只是将关键字存储在数据库中,这里是我使用的 PHP代码:

// take the referer 
$thereferer = strtolower($_SERVER['HTTP_REFERER']); 
// see if it comes from google 
if (strpos($thereferer,"google")) { 
    // delete all before q= 
    $a = substr($thereferer, strpos($thereferer,"q="));  
    // delete q= 
    $a = substr($a,2); 
    // delete all FROM the next & onwards 
    if (strpos($a,"&")) { 
     $a = substr($a, 0,strpos($a,"&")); 
    } 
    // we have the results. 
    $mygooglekeyword = urldecode($a); 
} 

and we can use <?= $mygooglekeywords ?> when we want to output the 
keywords. 
+1

哇,谢谢大家。我是一个谦虚的新手。我在四分钟之前发布了我的问题,并收到了三条有用的回复。堆栈溢出规则! – johnnyb10 2009-06-02 19:40:57

+1

有很多更好的方法来做到这一点。 PHP有一个内置的函数来解析一个url。 parse_url,parse_str使这3行。 – 2009-06-02 19:47:11

0

您可以抓取引荐网址并从查询字符串中抓取搜索词。搜索将在查询中显示为“q = searchTerm”,其中searchTerm是您想要的文本。

24

我会做这样的

$referringPage = parse_url($_SERVER['HTTP_REFERER']); 
if (stristr($referringPage['host'], 'google.')) 
{ 
    parse_str($referringPage['query'], $queryVars); 
    echo $queryVars['q']; // This is the search term used 
} 
+0

+1更干净的方式来做到这一点。 – 2009-06-02 19:47:30

+1

+1用于制作与国际谷歌域名(google.fi,google.de等)兼容的代码和谷歌图片搜索。 – 2009-06-02 19:52:04

+1

谢谢!我认为这里仍有潜在的误判 - google.domain.com有人 - 但这仅仅是一个例子。你可以通过检查$ referencesPage ['path']的值来加紧它,然后在$ queryVars ['q']上进行简单的isset()检查。 – 2009-06-02 19:58:25

0

同样的事情,但也有一些错误处理

<?php 
if (@$_SERVER['HTTP_REFERER']) { 
    $referringPage = parse_url($_SERVER['HTTP_REFERER']); 
    if (stristr($referringPage['host'], 'google.')) { 
     parse_str($referringPage['query'], $queryVars); 
     $google = $queryVars['q']; 
     $google = str_replace("+"," ",$google); } 
    else { $google = false; }} 
else { $google = false; } 

if ($google) { echo "You searched for ".$google." at Google then came here!"; } 
else { echo "You didn't come here from Google"; } 
?> 
0

对不起,多了几分
增加了对必应,雅虎和AltaVista的

支持
<?php 
if (@$_SERVER['HTTP_REFERER']) { 
    $referringPage = parse_url($_SERVER['HTTP_REFERER']); 
    if (stristr($referringPage['host'], 'google.') 
     || stristr($referringPage['host'], 'bing.') 
     || stristr($referringPage['host'], 'yahoo.')) { 
      parse_str($referringPage['query'], $queryVars); 
      if (stristr($referringPage['host'], 'google.') 
       || stristr($referringPage['host'], 'bing.')) { $search = $queryVars['q']; } 
         else if (stristr($referringPage['host'], 'yahoo.')) { $search =  $queryVars['p']; } 
         else { $search = false; } 
      if ($search) { $search = str_replace("+"," ",$search); }} 
      else { $search = false; }} 
else { $search = false; } 
if ($search) { echo "You're in the right place for ".$search; } 
?> 
+0

注:altavista似乎由雅虎拥有,当您使用它进行搜索时,您将被重定向到雅虎搜索页面,因此搜索雅虎。在标题涵盖了两个搜索引擎 – Senya 2011-09-20 00:47:01

13

这是一个古老的问题,答案自原始问题被问及并回答。截至2011年10月,谷歌正在为任何登录Google帐户的人加密此推荐信息:http://googleblog.blogspot.com/2011/10/making-search-more-secure.html

对于未登录Google的用户,搜索关键字仍位于推介链接中,上述答案仍适用。但是,对于通过身份验证的Google用户,网站无法查看其搜索关键字。

但是,通过创建专用登陆页面,可能仍然有可能做出明智的猜测。 (访问“Jabba the Hutt的尊严木炭素描”页面可能......好吧,疯了)

5

这是一个老问题,但我发现谷歌没有更多的给出查询术语,因为它默认将每个用户重定向到https,这不会给你“q”参数。除非有人用http(http://google.com)手动输入谷歌网址然后搜索,否则目前没有办法获得“q”参数。

+0

这是我害怕我会找到的答案。我注意到我的搜索跟踪现在没有任何搜索条件,这一定是为什么。 – felwithe 2016-03-17 19:14:33