【问题标题】:Parse html page from url link with xPath(javascript, jquery)使用 xPath(javascript,jquery)从 url 链接解析 html 页面
【发布时间】:2023-04-07 07:59:01
【问题描述】:

我真的是 Javascript/jQuery 的新手。我之前用 Objective-C 和 Swift 编写过代码,并且可以使用 XPath 和 Hpple 之类的框架解析 (x)html 网站。

现在我必须在 JavaScript 中做类似的事情(来自 parse.com 的云代码)。

我现在的问题是,我想这样解析:

var url = "http://www.google.com";
var xpath = "//body";
someJavaScriptMagic.parse(url, xpath);

我经常看到人们使用document.evaluate方法,但他们解析的是他们当前所在的网站,而不是另一个网站。

有没有办法做到这一点?

我不知道这是否重要,但我正在使用来自 parse.com 的 CloudCode

编辑:

我已经尝试过使用 ajax 查询:

$.ajax({ url: 'http://www.digitec.ch', success: function(data) { alert(data); } });

但我每次都会收到以下错误:

XMLHttpRequest cannot load http://www.digitec.ch/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://fiddle.jshell.net' is therefore not allowed access.

【问题讨论】:

  • 您想从给定的 URL 中获取网站的 HTML 代码,然后从该 HTML 代码中提取元素?
  • 是 XPath 吗?
  • 如果您知道我可以使用“解析字符串”的其他方式,请随时展示。 :)
  • 您需要使用 YQL 从 JavaScript 执行此操作。它接受 url 和 xpath 表达式,并为您返回带有您的 js 可以使用的 cors 或 json 的 xml。

标签: javascript jquery parsing xpath parse-cloud-code


【解决方案1】:

我认为SlimerJS 会帮助你。

【讨论】:

    【解决方案2】:

    您不能向与为发出请求的资源提供服务的域不同的域发出 AJAX 请求(即 JavaScript 中的 HTTP 请求)。换句话说,如果您的 JavaScript 是从“foo.com/some.js”提供的,并且它正在尝试获取“google.com”,它将失败。这称为同源策略,它是 Web 应用程序安全的基本原则。在这里阅读:http://en.wikipedia.org/wiki/Same-origin_policy。谷歌搜索“Access-Control-Allow-Origin”(来自您的错误)也会为您提供更多关于此的信息。

    您可以通过向您自己的域中用作代理的脚本发出请求来解决此问题。例如:

    foo.com/some.js

    var url = "http://www.google.com";
    someJavaScriptMagic.get("foo.com/fetchUrl?url="+url);
    

    然后您有一个接受该请求的后端脚本,然后向 CGI 参数“url”指定的主机发出 HTTP 请求并返回 HTML。

    【讨论】:

    • 在 dotNet 框架中,通过服务器端脚本获取 XHTML 或任何有效的 XML 并使用 XPATH 进行搜索非常容易。 Html(非 XML 兼容)变体可能有点棘手。我过去使用 HtmlAgilityPack 实现了类似的功能,它实现了 XPATH 表达式(它的属性搜索曾经很奇怪,不知道他们是否修复过它)。
    【解决方案3】:

    查看this thread,了解如何从 URL 获取 HTML。

    您可以使用 jQuery 函数 parseHTML 将字符串转换为一堆 DOM 对象,然后将这些 DOM 对象转换为 select elements

    如果您坚持使用 XPath,那么您可能想看看 document.evaluatethis thread

    【讨论】:

    • 我的问题是,如果我从线程的链接在 jsfiddle 中使用这个函数,我会收到错误:XMLHttpRequest cannot load digitec.ch。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问 Origin 'fiddle.jshell.net'。
    • 如果您可以使用 jQuery,那么 ajax 调用就足够了,不是吗? digitec是你要抓取的网站吗?
    • 我试过这个函数:$.ajax({ url: 'digitec.ch', success: function(data) { alert(data); } });但错误是一样的。我在 Chrome 中尝试过。
    • 快速搜索给你this answer
    猜你喜欢
    • 1970-01-01
    • 2011-07-06
    • 2012-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    相关资源
    最近更新 更多