PHP简单的HTML DOM解析器 - 使用preg_match_all解析Javascript变量

时间:2014-08-06 19:10:33

标签: javascript php html dom

我目前正在使用PHP Simple HTML DOM Parser来获取数据。有关解析器的更多信息,请访问:http://simplehtmldom.sourceforge.net/

我正在处理一个解析Javascript变量的脚本,我希望它们是一个简单的文本。

这是我解析的页面: http://www.sportsdirect.com/adidas-adi5-x-ite-mens-astro-turf-trainers-263185?colcode=26318536

以下是我用于解析的代码:

<?PHP
include_once('simple_html_dom.php');
$url = "http://www.sportsdirect.com/adidas-adi5-x-ite-mens-astro-turf-trainers-263185?colcode=26318536";

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSLVERSION, 3);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
$str = curl_exec($curl);  
curl_close($curl);  

$html= str_get_html($str); 

preg_match_all('/\"SizeName\":\"([0-9]+)\"/',$str,$matches);
echo '<pre>';
print_r($matches);
echo '</pre>';
?>

您可以在此处查看此代码的输出: http://sportsdirectbg.superweb.bg/test.php

  1. 首先,如何在没有这些数组的情况下将这些值打印成简单文本(以及这些数字[0] [1] [2] [3],它们放在每个结果之前?
  2. 为什么这个scirpt给我带有完整数字的结果,例如,你可以在我正在解析的页面的输出源中看到你可以找到javascript变量&#34; SizeName&#34;结果如6.5但在我的情况下,它将它们打印为简单的6,为什么?
  3. 正如您在每个javascript变量&#34; SizeName&#34;之后我在解析的页面的输出源中看到的那样。还有其他的javascript变量名为&#34; SellPrice&#34;这个变量包含大小的价格。我也希望得到这个价值。所以我可以打印这样的东西:
  4. $ProductSize - $ProductPrice如果你能理解我的意思。

    提前致谢!

1 个答案:

答案 0 :(得分:0)

首先,这几乎与之前提到的PHP Simple HTML DOM Parser and Javascript selection?重复。

你获得整数的原因是因为你的正则表达式只是寻找整数,所以改变它你将得到包括小数在内的整个大小。但正如Patrick Q所说,你的部分问题是没有正确使用Simple HTML DOM Parser来通过ID或类名等来获取这些元素,而不是通过正则表达式。

正如我在另一个问题中所说的那样,通过简单的HTML DOM Parser无法进行Javascript解析。如果你愿意,你可以抓住整个页面并搜索具有不同选项的JSON数组的colourVariantsInitialData,但我相信这不可能使用HTML DOM Parser,但可能是这样! / p>