什么阻止我使用$ .ajax加载另一个域的HTML?

时间:2012-01-20 16:30:22

标签: jquery html ajax screen-scraping web-scraping

我的域名:

<!DOCTYPE html>  
<html>
<head>
<title>scrape</title>
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
</head>
<body>
    <script>
        $.ajax({url:'http://their-domain.com/index.html',
        dataType:'html',
            success:function(data){console.log(data);}
        });
    </script>
</body>
</html>

是什么阻止我刮掉他们的域名?有什么工作吗?

附录:感谢大家使用服务器端脚本的建议,但我目前只对使用客户端解决此问题感兴趣。

如果我使用“jsonp”格式化请求,我至少会得到一个响应,但出现以下错误:“Uncaught SyntaxError:Unexpected token&lt;”。所以我从他们的域获得响应,但解析器期望它是json。 (它也应该。)我正在通过这个试图看看它们是否是欺骗客户接受此响应的方法。请理解我知道这是非典型的。

<!DOCTYPE html>  
<html>
<head>
<title>scrape</title>
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
</head>
<body>
    <script>
        $.ajax({url:'http://their-domain.com/index.html',
        dataType:'jsonp',
            success:function(data){console.log(data);}
        });
    </script>
</body>
</html>

4 个答案:

答案 0 :(得分:6)

有四种方法可以绕过Same Origin Policy

  1. 代理 - 您从服务器请求它,您的服务器从其他域请求它,您的服务器将其返回到浏览器
  2. Flash cross domain policy - 其他域必须将crossdomain.xml文件添加到其网站
  3. Cross domain HTTP header - 其他域名必须在其网页上添加Access-Control-Allow-Origin标题
  4. JSONP - 它是一个提供回调功能的json Web服务。其他域名必须实现此目的。
  5. 注意:在没有其他域帮助的情况下,方式是#1,通过您自己的服务器进行路由。

答案 1 :(得分:2)

同源策略,可防止跨域请求。如果你想要抓取HTML,你最好写一个服务器端进程来获取内容,然后使用ajax对服务器发出请求,其中包含收集的数据。

答案 2 :(得分:2)

Same Origin Policy阻止客户端脚本从不是来自请求的发起者的域获取数据。您需要服务器端脚本作为代理

答案 3 :(得分:0)

一种解决方法是制作服务器端脚本(例如PHP)来获取页面,并$.ajax调用该页面。