【问题标题】:Javascript view source html of another websiteJavascript查看另一个网站的源html
【发布时间】:2017-07-10 08:26:22
【问题描述】:

我目前正在开发一个简单的网络爬虫,它将显示给定网站的所有链接。例如,这就是我希望我的程序执行的操作:

-你给它一个网址:http://www.example.com/

-然后程序获取 html 源代码并查找所有 <a href=...></a>tags

-最后,所有的链接都会显示给用户

为此,我将简单的 javacsript 与 jQuery 一起使用,目前卡在 $.ajax() 调用上:

$.ajax({
    url:"http://example.com",
    dataType : "jsonp",
    crossDomain : true,
    success : function(data){
        console.log(data);
    }       
});

这会引发Uncaught SyntaxError: Unexpected token < 错误,我不知道如何解决。

这种行为真的可能吗?如果不是,网络浏览器如何实际显示任何站点的源代码?如果这不是获取 HTML 源代码的正确方法,那么正确的方法是什么?

感谢您的关注

【问题讨论】:

  • 一般来说,一个 url 不会返回一个 JSONP 响应,除非你专门使用一个端点。只是将 dataType 设置为 JSONP 并不能神奇地让服务器回馈一个,它必须支持它
  • 由于 CORS 限制,如果不使用代理(在您的服务器或第三方服务上),单独使用 ajax 将无法正常工作
  • 您正在爬取页面以获取链接,这表示您的dataType 不能是jsonp,而是html
  • 如果在页面加载后使用 javascript 插入远程页面中的 html,还需要使用无头浏览器......这几天很常见
  • @apokryfos 我同意,但是将 dataType 设置为 html 将不起作用,因为它会违反跨域策略

标签: javascript jquery ajax cross-domain


【解决方案1】:

您可以通过创建“代理”来使用 php 进行设置。您可以在网上查找它,但我记得它是这样的:

PROXY.PHP

<?php
print file_get_contents($_POST[‘url’]);
?>

关于 JQUERY var yourURL = “你的网址”; $(“div”).load(“proxy.php?url=“+yourURL)

如有任何疑问,请随时提出 希望对你有帮助:D

【讨论】:

  • 谢谢,这是一个相对简单的解决方案。但我想指出(根据我的研究),您不能仅使用 javascript 访问跨域站点。有一些边缘情况(当服务器支持 CORS 时:html5rocks.com/en/tutorials/cors),但您不能指望任何站点都会出现这种情况。
  • 没错。在大多数情况下,限制是出于您和用户的安全目的。想象一下,如果有人在他们的网站上使用恶意代码显示您的银行账户页面;或者如果有人向您的网站提交了恶意代码......我知道限制是有目的的,不建议违反它
猜你喜欢
  • 1970-01-01
  • 2018-04-13
  • 1970-01-01
  • 1970-01-01
  • 2022-11-27
  • 2016-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多