javascript - 从 Javascript 解析 CDATA

标签 javascript html parsing dom cdata

这是我的第一篇文章,如果我做错了,我很抱歉,但我们开始吧:

我一直在从事一个应该从网站上抓取值(value)的项目。这些值是 javascript 数组中的变量。我正在使用 PHP Simple HTML DOM它适用于普通脚本,但不适用于存储在 CDATA block 中的脚本。因此,我正在寻找一种在 CDATA block 中抓取数据的方法。不幸的是,我能找到的所有帮助都是针对 XML 文件的,而我正在从 HTML 文件中抓取。

我试图抓取的 javascript 如下:

<script type="text/javascript">
//<![CDATA[
var data = [{"value":8.41,"color":"1C5A0D","text":"17/11"},{"value":9.86,"color":"1C5A0D","text":"18/11"},{"value":7.72,"color":"1C5A0D","text":"19/11"},{"value":9.42,"color":"1C5A0D","text":"20/11"}];
//]]>
</script>

我需要抓取的是 var 数据中的“值”变量。

问题是我试图替换对象上的 CDATA 字符串。 以下代码完美运行:-)

include('simple_html_dom.php');

$lines = file_get_contents('http://www.virtualmanager.com/players/7793477-danijel-pavliuk/training');

$lines = str_replace("//<![CDATA[","",$lines);
$lines = str_replace("//]]>","",$lines);

$html = str_get_html($lines);

foreach($html->find('script') as $element) {
    echo $element->innertext;
}

如果需要,我会为您提供更多信息。

最佳答案

一个像样的 HTML 解析器不应该要求将 Javascript 包装在 CDATA 中堵塞。如果他们放弃了它,只需在解析之前将它们从 HTML 中删除,执行如下操作:

  1. 使用 file_get_contents() 将 HTML 文件下载到字符串中或 cURL如果您的主机在该功能中禁用了 HTTP 支持。
  2. 去掉 //<![CDATA[//]]>使用 str_replace() 的位
  3. 使用简单 DOM 的 str_get_html() 从清理后的字符串中解析 HTML
  4. 像以前一样处理 DOM 对象。

关于javascript - 从 Javascript 解析 CDATA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15449288/

相关文章:

python - 使用 PyParsing 解析系统日志

javascript - 如何以编程方式设置 jQuery TreeSelect 的值

javascript - 我如何让 DOM 知道动态创建的新元素?

html - 制作一个屏幕宽度一定的div元素 "think"?

html - 用于显示 :table - tfooter or footer

java - 将 JSON 字符串分隔为 android 中的变量

c++ - 正则表达式是否足以分析大文本?

javascript - 捕捉 svg 动画分组路径

javascript - asp.net mvc json.net 响应

javascript - 如何使用 XMLHttpRequest() 和 Javascript 处理 POST 请求错误