【问题标题】:How can i parse remote html page using pure java script我如何使用纯 javascript 解析远程 html 页面
【发布时间】:2013-03-26 13:51:39
【问题描述】:

我需要解析远程 html 页面(例如:www.mywesite.com/home)我如何获取该网站的 html 页面源以及如何解析该页面

那个html是这样的

 <html>
     <body>
        <div class="my-class1">
             <a href="home/link?id=1">hello</a>
        </div>

        <div class="my-class1">
             <a href="home/link?id=2">hey</a>
        </div>

        <div class="my-class1">
             <a href="home/link?id=3">bye</a>
        </div>
     </body>
 </html>

我想输出为

 hello
 hey
 bye 

我没有使用任何服务器端技术(如 java、.net)我只想使用 java 脚本来实现这一点

是否可以使用纯 javaScript 或任何其他 jQuery 插件解析远程 html 页面

提前致谢

【问题讨论】:

  • 由于同源策略,这是不可能的
  • @Amberlamps 那么我该如何以其他方式实现这一目标???
  • 你只能在服务器端做。
  • @fredrik - (假设我理解)我不同意。我正在通过 ajax 将这种技术广泛用于同源子页面
  • @ccyoung 据我了解,如果当前页面是从www.somedomain.com 加载的,那么您不能将ajax 转换为www.someotherdomain.com,这就是他想要做的。当然,您可以随时禁用该策略。

标签: javascript jquery html html-parsing


【解决方案1】:

普通浏览器的javascript不能从任何服务器访问远程页面的内容,除了它自己的。

你可以:

  1. 在您自己的服务器上有一个合作脚本来获取远程内容

  2. 在远程服务器的配合下,您或许能够通过适当的 CORS (http://en.wikipedia.org/wiki/Cross-origin_resource_sharing) 安排访问内容。

  3. 再次与远程服务器合作,如果它通过 javascript 提供其内容,您可以通过创建内联脚本元素来访问它。 “JSONP”就是这种方法的一个例子。

  4. 如果您编写浏览器插件或插件(用于允许使用 javascript 编写此类内容的浏览器),那么您就不会以同样的方式受浏览器安全模型的约束。

【讨论】:

    【解决方案2】:

    假设origin 固定等,这是我使用的方法:

    // 获取html的body部分 txt = txt.substr( txt.indexOf('')+6 ); txt = txt.substr(0, txt.indexof('&lt/body&gt')-1); // 将body粘贴到div中 var div = document.createElement('div'); div.innerHTML = txt; // 从每个元素中提取文本内容(或更有趣的东西) Array.prototype.slice(div.querySelectorAll('*')).forEach(function(el) { if( el.textContent ) console.log( el.textContent ); });

    【讨论】:

    • 我如何从我的服务器获取远程服务器 html 页面的正文部分,比如说 stackoverflow.com 页面
    • @sunny 你不能使用 javascript,如前所述的同源策略。你需要服务器端代码。
    猜你喜欢
    • 2011-11-14
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 2012-12-18
    • 2010-12-03
    • 1970-01-01
    相关资源
    最近更新 更多