Javascript XPath可用于搜索a<;脚本>;块

Javascript XPath可用于搜索a<;脚本>;块,javascript,php,dom,xpath,selector,Javascript,Php,Dom,Xpath,Selector,我在选择各种HTML内容方面都很有技巧。因此,我满怀信心地创建了一些本应该是翻录网站内容的代码,我偶然发现了一些奇怪的JavaScript代码,源代码将其价格放入其中 <script> var productConfig = {"attributes":{"178":{"id":"178","code":"bp_flavour","label":"Smaak","options":[{"id":"28","label":"Aardbeien","oldPrice":"0","pro

我在选择各种HTML内容方面都很有技巧。因此,我满怀信心地创建了一些本应该是翻录网站内容的代码,我偶然发现了一些奇怪的JavaScript代码,源代码将其价格放入其中

<script>
 var productConfig = {"attributes":{"178":{"id":"178","code":"bp_flavour","label":"Smaak","options":[{"id":"28","label":"Aardbeien","oldPrice":"0","products":["2292","2294","2296","2702"]}

然而,我的查询
//script[包含(,“finalPrice”)]
将整个脚本一扫而光,我找不到更深入、更具体地挖掘JavaScript的方法。有人知道更多/能给我一个提示吗?

你可以试试正则表达式:

preg_match_all("/finalPrice\\":\\"([0-9.]{1,10})\\"/", $page_html, $output_array);

您可以尝试正则表达式:

preg_match_all("/finalPrice\\":\\"([0-9.]{1,10})\\"/", $page_html, $output_array);

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

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

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

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

所以我所做的是:用提供的XPATH查询读取脚本。然后:strstr,直到我得到我想要的json部分。接下来是:PHP的json_解码函数。将其放入数组中,然后在数组中搜索我想要的内容。这是我的解析代码:

        $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看起来像垃圾,但很有效。谢谢大家的想法。json_解码ftw

我所做的是:用提供的XPATH查询读取脚本。然后:strstr,直到我得到我想要的json部分。接下来是:PHP的json_解码函数。将其放入数组中,然后在数组中搜索我想要的内容。这是我的解析代码:

        $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看起来像垃圾,但很有效。谢谢大家的想法。json_解码ftw

请发布您的代码。嘿,我编辑它是为了更具体。
=
右侧的表达式看起来像JSON,因此使用解析它可能比使用正则表达式更好。当然。假设它是JSON,然后使用XPath将其作为字符串读取,然后将其放入JSON解析器中。谢谢,请发布您的代码。嘿,我对它进行了更具体的编辑,
=
右侧的表达式看起来像JSON,因此使用解析可能比使用正则表达式更好。当然。假设它是JSON,然后使用XPath将其作为字符串读取,然后将其放入JSON解析器中。谢谢你的回答,我该如何修改这个片段,只选择“ID”为2292的最终价格?这样地?preg\u match\u all(“/2292\\”:“/finalPrice\\”:\”([0-9.]{1,10})\\“/”,$page\u html,$output\u array);检查以下内容:preg\u match\u all(/2292(.*)finalPrice\\”:\“([0-9.]{1,10})\\”/“,$input\u line,$output\u array);谢谢你的回答,我该如何修改这段代码,只选择“ID”为2292的最终价格?这样地?preg\u match\u all(“/2292\\”:“/finalPrice\\”:\”([0-9.]{1,10})\\“/”,$page\u html,$output\u array);检查以下内容:preg\u match\u all(/2292(.*)finalPrice\\”:\“([0-9.]{1,10})\\”/“,$input\u line,$output\u array);谢谢你的回答。我修改了问题中的javascript,使其更加具体。object name=productConfig,我在其中搜索的变量是childProducts。在这个var中有一个数组,它包含2292产品(4次),我在查询时尝试了这个:productConfig['childProducts']['2290']['finalPrice'])它没有返回任何东西。你知道我做错了什么吗?谢谢你的回答。我修改了问题中的javascript,使其更加具体。object name=productConfig,我在其中搜索的变量是childProducts。在这个var中有一个数组,它包含2292产品(4次),我在查询时尝试了这个:productConfig['childProducts']['2290']['finalPrice'])它没有返回任何东西。你知道我做错了什么吗?