JS跨域抓取HTML页面并解析 -问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

JS跨域抓取HTML页面并解析

2016-06-14 13:40:20 2370 1

RT,想通过JS抓取远端的HTML页面并解析页面(能分别解析tag最好,不能的话正则吧)获取内容
不是node.js就是本地的javascript(或者jquery)
想知道这种想法能实现么?

取消 提交回答
全部回答(1)
  • 杨冬芳
    2019-07-17 19:37:21

    same origin policy

    页面中的Javascript只能读取,访问同域的网页。这里需要注意的是,Javascript自身的域定义和它所在的网站没有任何关系,只和该Javascript代码所嵌入的文档的域有关。如以下示例代码:

    <!DOCTYPE HTML>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>This is a webpage came from http://localhost:8000</title>
      <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
    </head>
    <body>
      <div id="test">123</div>
      <script type="text/javascript">
        console.log($('#test').text());
      </script>
    </body>
    </html>

    该HTML文档来源于http://localhost:8000,这意味着它的域为http://localhost:8000(域和端口也相关),虽然页面中的jquery加载自ajax.googleapis.com,然而该JQuery的域只和它所处的HTML文档的域有关,从而可以访问该HTML文档的属性,因而以上代码可以正常运行。
    附:使用上述代码的原因是,开发者将通用的Javascript库(如JQuery)地址指向公共相同的URL。当用户加载过一次该JS后,以后的加载将都通过浏览器缓存,从而加快了页面加载速度。

    从这个角度看问题,假如提问者所知的远端指的是互联网上任意的页面,那么不能实现你所期望的功能;如果远端指的是提问者你所拥有控制权的网站,请看下面的Relaxing the same-origin policy;

    Relaxing the same-origin policy
    1.Document.domain:用于子域名的情况。对于多个windows(一个页面有多个iframe),通过设置document.domain的值为相同的域,使得Javascript可以访问异域window;
    2.Cross-origin resource sharing:通过在服务器端返回头增加Access-Control-

    Allow-Origin,该头部包含了所有允许访问的域的列表。支持的浏览器将允许本页面Javascript访问这些域;
    1.cross-document messaging:该方式和域无关,不同文档的Javascript可以相互发送接受消息而不受限制,然而不能主动趣读取,调用另一个文档的方法属性;

    如果提问者拥有远端页面的控制权,可以尝试第二种方法。

    服务器端抓取

    根据提问者的需求,比较可行的方案应该是在服务器端进行处理。借助(http://phantomjs.org/),你可以使用Javascript语法在服务器端进行DOM操作,同时你可以使用nodejs进行进一步的分析等,当然,你也可以使用Python, php ,Java语言进行后续操作。

    参考资料

    同源策略
    http://en.wikipedia.org/wiki/Same_ori...
    Google Hosted Libraries
    https://developers.google.com/speed/l...
    Cross-origin resource sharing
    http://en.wikipedia.org/wiki/Cross-or...
    http://www.w3.org/TR/cors/
    phantomjs
    https://github.com/ariya/phantomjs

    0 0
相关问答

3

回答

JS跨域抓取HTML页面并解析

2016-07-29 10:28:55 2180浏览量 回答数 3

1

回答

JS跨域抓取HTML页面并解析

2016-03-23 15:21:09 2578浏览量 回答数 1

1

回答

可以将HTML页面的标题设置为“Web前端设计”的是什么呢?

2021-10-31 15:13:26 449浏览量 回答数 1

2

回答

新建html5页面把生成的<meta charset="utf-8"> 改为gb2312出现乱码

2016-06-06 15:56:11 2214浏览量 回答数 2

1

回答

如何用springMVC 返回一个指定的HTML页面?

2016-03-17 09:56:55 4876浏览量 回答数 1

1

回答

如何实现获取html页面输入框的数据

2016-03-13 13:38:26 2517浏览量 回答数 1

1

回答

请教个html页面里的一个参数的意思

2016-03-12 14:28:44 1605浏览量 回答数 1

1

回答

在页面load时,就通过判断UID来改写html?

2016-03-13 10:32:56 1982浏览量 回答数 1

1

回答

空间浏览html 的页面全部显示乱码,浏览aspx到没问题

2015-06-12 20:42:15 7968浏览量 回答数 1

4

回答

哪位帮忙做个HTML页面,备案用的,送33元代金卷

2012-09-18 13:45:38 8671浏览量 回答数 4
+关注
杨冬芳
IT从业
1
文章
9167
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载