Parsing CDATA from Javascript

Parsing CDATA from Javascript

本文关键字:Javascript from CDATA Parsing      更新时间:2023-09-26

这是我的第一个帖子,如果我做错了,我很抱歉,但我们继续:

我一直在做一个项目,应该从一个网站刮值。这些值是javascript数组中的变量。我使用的PHP简单的HTML DOM,它与正常的脚本,但不是一个存储在cdata块工作。因此,我正在寻找一种在cdata块中抓取数据的方法。不幸的是,我能找到的所有帮助都是针对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数据中的"value"变量。

问题是我试图替换对象上的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. 下载HTML文件到一个字符串,使用file_get_contents()或cURL如果你的主机在该功能中禁用HTTP支持。
  2. 使用str_replace()去除//<![CDATA[//]]>
  3. 使用简单DOM的str_get_html()从清理过的字符串中解析HTML
  4. 继续处理DOM对象