可以使用XPath搜索<script>块吗?

时间:2015-07-30 08:29:43

标签: javascript php dom xpath selector

我在选择各种HTML内容方面技巧娴熟。因此,所有人都有信心创建一些应该抓取网站内容的代码,我偶然发现了一些奇怪的JavaScript代码,其中源代码将其价格放入其中。

&#xA;&#xA;
 &lt; script&gt ;&#XA; var productConfig = {“attributes”:{“178”:{“id”:“178”,“code”:“bp_flavour”,“label”:“Smaak”,“options”:[{“id”:“28 ”, “标签”: “Aardbeien”, “oldPrice”: “0”, “产品”:[ “2292”, “2294”, “2296”, “2702”]}&#XA;  
&#xA;&#xA;

....更多的乱码和每个产品变体的4个:(所以像这样的80个不同的行:)

&#xA;&#xA; <预> <代码>, “childProducts”:{&#XA; “2292”: “价格”: “64.99”, “finalPrice”: “64.99”, “no_of_servings”: “166”, “178”: “27” , “179”: “34”},&#XA; “2292”: “价格”: “17.99”, “finalPrice”: “17.99”, “no_of_servings”: “33”, “178”: “28”, “179”: “25”}&#XA;}&#XA;&#XA;&#XA;&LT; /脚本&GT;&#XA; &#XA;&#XA;

显然2292是手头产品的ID。我想读出“finalPrice”。

&#xA;&#xA;

我的PHP代码:

&#xA;&#xA;
  $ file = $ this-&gt; curl_get_file_contents($ url);&#xA; $ doc = new DOMDocument();&#xA; @ $ doc-&GT; loadHTML($文件);&#XA; $ doc-&gt; preserveWhiteSpace = false;&#xA; $ finder = new DomXPath($ doc);&#xA;&#xA; $ price_query = $ finder-&gt; query(“// script [contains(。,'finalPrice')]”);&#xA; $ price_raw = $ price_query-&gt; item(0) - &gt; nodeValue;&#xA;  
&#xA;&#xA;

但我的查询 // script [包含(。,“finalPrice”)] 爆炸整个脚本我无法找到更深入,更具体地在JavaScript中挖掘的方法。有谁知道更多/可以给我一个提示?

&#xA;

3 个答案:

答案 0 :(得分:0)

您可以尝试正则表达式:

npm install

答案 1 :(得分:0)

您可以像这样从对象中读取属性。

var obj = {"2292":{"price":"64.99","finalPrice":"64.99","no_of_servings":"166","178":"27","179":"34"}};
obj['2292']['finalPrice']

答案 2 :(得分:0)

所以我做了:用提供的XPATH查询读出脚本。比:strstr直到我得到了我想要的json部分。接下来是:PHP的json_decode函数。将它放在一个数组中,而不是在数组中搜索我想要的内容。这是我的解析代码:

        $price_query = $finder->query("//script[contains(.,'finalPrice')]");
        $price_raw = $price_query->item(0)->nodeValue;
        $price_1 = strstr($price_raw, "childProducts");
        $price_2 = str_replace('childProducts":', '', $price_1);
        $price_3 = strstr($price_2, ',"priceFromLabel"', true);     
        $price_data = json_decode($price_3, true);

看起来像str str但是有效。谢谢大家的想法。 json_decode ftw!