【问题标题】:Unable to make JSONP requests to Google Search webpage无法向 Google 搜索网页发出 JSONP 请求
【发布时间】:2015-05-03 11:10:52
【问题描述】:

这是我的小提琴http://jsfiddle.net/x06Lr919/4/

$.getJSON('http://google.com/search?&q=hi&callback=?',
    function(data) {
        console.log(data);
        $("#target").html(data.contents);

});

我想获取“http://google.com/search&q=hi”的整个 HTML 作为此网页的字符串。我知道这个网站:www.whateverorigin.org 可以让我这样做,但我不想为此目的使用任何其他外部网站。

我知道,我们必须使用 JSONP,因此我添加了回调。

我无法理解返回的数据类型。试过JSON.stringify 但没有帮助。

【问题讨论】:

  • 错误 404(未找到)
  • 只有当你从中获取数据的服务器支持 JSONP 时,你才能使用它,而谷歌的搜索结果不支持,它甚至不是 JSON
  • 查询字符串结构应该更像:http://google.com/search?q=hi&callback=somecallback.
  • 进行更改以防止 404 错误。 @adeneo 有什么办法解决这个问题吗?像 file_get_contents();在 PHP 中?
  • PHP 将获取内容,没问题,但 Google 竭尽全力确保您不能轻易抓取他们的搜索结果,所以祝您好运。我相信他们为这类事情提供了付费 API。

标签: javascript jquery html json jsonp


【解决方案1】:

你可以这样刮:

<?php
function searchGoogle($query, $pages = 1){
  $r = array();
  for($i=0,$n=0; $i<$pages; $i++,$n+=10){
    $doc = new DOMDocument;
    @$doc->loadHTMLFile('https://www.google.com/search?q='.urlencode($query)."&start=$n");
    $c = $doc->getElementsByTagName('cite');
    foreach($c as $e){
      if($e->hasAttribute('class') && $e->getAttribute('class') === '_Rm'){
        array_push($r, $e->nodeValue);
      }
    }
  }
  echo json_encode($r);
}
/* on your JavaScript page 
$.post('thisURL.php', {search:'Anything you want to search here.', pages:2}, function(urlsArray){
  // handle urlsArray here
});
*/
if(isset($_POST['search'], $_POST['pages'])){
  searchGoogle($_POST['search'], $_POST['pages']); // 20 results
}
?>

【讨论】:

  • 如何验证 google 页面是在客户端而不是服务器端报废的?如果它是服务器端的,那么它就超出了我的全部目的。
猜你喜欢
  • 2017-02-28
  • 1970-01-01
  • 2013-11-23
  • 2011-07-12
  • 1970-01-01
  • 2021-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多