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


PHP Simple HTML DOM Parser - parsing Javascript variables with preg_match_all

我目前使用PHP简单的HTML DOM解析器来获取数据。关于解析器的更多信息,请查看:http://simplehtmldom.sourceforge.net/

我正在工作的一个脚本是解析Javascript变量,我希望他们作为一个简单的文本。

下面是我解析的页面:http://www.sportsdirect.com/adidas adi5 - x -尽管犯罪-阿斯特罗草皮运动鞋- 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. 为什么这个脚本给我的结果与完整的数字,在例子中,你可以看到在页面的输出源,我正在解析你可以找到javascript变量"SizeName"的结果,如6.5,但在我的情况下,它打印它们作为简单的6,为什么?
  3. 正如你可以在页面的输出源中看到的,我在每个javascript变量"SizeName"之后解析还有其他javascript变量称为"SellPrice",这个变量包含了大小的价格。我也想得到这个值。所以我可以打印如下内容:

$ProductSize - $ProductPrice如果你能明白我的意思。

提前感谢!

首先,这几乎是你之前问的一个重复,PHP简单HTML DOM解析器和Javascript选择?

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

Javascript解析不可能通过简单的HTML DOM解析器,正如我在另一个问题中所说的。如果你想,你可以抓住整个页面,并通过搜索colourVariantsInitialData有不同的选项的JSON数组,但我相信这是不可能使用HTML DOM解析器,可能是虽然!