如何使用Simple HTML DOM在javascript标记内获取文本

时间:2015-04-02 12:10:01

标签: php regex parsing

示例:

"zoom":["/PIAimages/0109385_PE259024_S5.JPG","/PIAimages/0168069_PE259026_S5.JPG"]}

"zoom":["/PIAimages/0086284_PE214924_S5.JPG","/PIAimages/0168084_PE270701_S5.JPG","/PIAimages/0168086_PE270696_S5.JPG","/PIAimages/0168087_PE274626_S5.JPG"]

如何获取所有补丁到jpg图像? 如何使用PHP Simple HTML DOM Parser找到这个部分?我根本不知道这样做。

来源:

<script type="text/javascript" language="JavaScript">
var js_fn_MAX_NO_OF_LISTS = "10";
var jProductData = {"product":{"partNumber":"16538 [GENERICPRODUCT]","attributes":[{"type":"00018","name":"kolor","id":"796491"},{"type":"00019","name":"rozmiar","id":"796492"}],"catEntryId":"502710","items":[{"designerThoughts":{"heading":"Projektant Mikael Warnhammar","text":""},"californiaTitle20Product":false,"prices":{"hasPrfCharge":false,"enablenlpinterval":0,"hasEcoFee":false,"normal":{"priceNormalPerUnit":{"unit":""},"priceNormal":{"rawPrice":349,"value":"349 PLN ","priceExclVat":"283,74 PLN "},"priceNormalDual":{}},"isUnitPricePrimary":false,"usesUnitPriceMeasure":false,"hasTemporaryFamilyOffer":false,"hasFamilyPrice":false,"comparisonPriceExists":false},"images":{"large":["/pl/pl/images/products/duktig-kuchnia-do-zabawy__0086283_PE214923_S4.JPG","/pl/pl/images/products/duktig-kuchnia-do-zabawy__0168089_PE266789_S4.JPG"],"thumb":["/PIAimages/0086283_PE214923_S2.JPG"],"small":["/PIAimages/0086283_PE214923_S1.JPG"],"normal":["/PIAimages/0086283_PE214923_S3.JPG","/PIAimages/0168089_PE266789_S3.JPG"],"zoom":["/PIAimages/0086283_PE214923_S5.JPG","/PIAimages/0168089_PE266789_S5.JPG"]},"buyable":false,"metric":"Wysokość: 58 cm<br/>Szerokość: 72 cm / 72 cm<br/><br/>","custBenefit":"<cbs><cb><t>Zachęca do odgrywania scenek rozwijając u dzieci umiejętności społeczne poprzez naśladowanie dorosłych i wymyślanie swoich własnych ról.<\/t><\/cb><cb><t>Włączone diody płyty grzewczej świecą jak w prawdziwej kuchence, ale nie nagrzewają się. Diody można dowolnie włączać i wyłączać.<\/t><\/cb><cb><t>Diody zasilane są przez baterie o niskim napięciu i wyłączają się automatycznie po paru minutach oszczędzając energię.<\/t><\/cb><cb><t>&quot;Rośnie&quot; razem z dzieckiem. 3 różne ustawienia wysokości nóg.<\/t><\/cb><\/cbs>","environment":"","availabilityUrl":"/pl/pl/catalog/availability/70129801/","packagePopupUrl":"/pl/pl/catalog/packagepopup/70129801/","url":"/pl/pl/catalog/products/70129801/","goodToKnow":"Baterie sprzedawane są oddzielnie, potrzebnych jest 6 sztuk baterii LR6 AA 1.5V.<br/>Diody świetlne są zasilane prądem o bardzo niskim napięciu i dlatego nie nagrzewają się.<br/>Można dodać górną sekcję mini kuchni i przybory kuchenne z serii DUKTIG.<br/>Zalecane dla dzieci od 3 lat<br/>","nopackages":"1","designer":"Mikael Warnhammar","techInfoArr":[],"careInst":"Przecierać czystą wilgotną tkaniną<br/>","validDesign":[],"goodToKnowPIP":"Diody świetlne są zasilane prądem o bardzo niskim napięciu i dlatego nie nagrzewają się.<br/>Można dodać górną sekcję mini kuchni i przybory kuchenne z serii DUKTIG.<br/>Zalecane dla dzieci od 3 lat<br/>","partNumber":"70129801","attachments":[{"type":"ASSEMBLY_INSTRUCTIONS","name":"Instrukcja montażu","atcharray":[{"attachmentName":"DUKTIG Kuchnia do zabawy","articleNumber":"70129801","attachmentPath":"/pl/pl/assembly_instructions/duktig-kuchnia-do-zabawy__AA-372779-4_pub.pdf"}]},{"type":"MANUALS","name":"Instrukcja","atcharray":[{"attachmentName":"DUKTIG Kuchnia do zabawy","articleNumber":"70129801","attachmentPath":"/pl/pl/manuals/duktig-kuchnia-do-zabawy__AA-896291-3_pub.pdf"},{"attachmentName":"DUKTIG Kuchnia do zabawy","articleNumber":"70129801","attachmentPath":"/pl/pl/manuals/duktig-kuchnia-do-zabawy__AA-905674-2_pub.pdf"}]}],"bti":false,"name":"DUKTIG","soldSeparately":"Baterie sprzedawane są oddzielnie, potrzebnych jest 6 sztuk baterii LR6 AA 1.5V.<br/>","reqAssembly":true,"metricPackageInfo":[{"quantity":"1","length":740,"width":390,"articleNumber":"70129801","weight":13900,"height":145}],"type":"Kuchnia do zabawy","dualCurrencies":false,"catEntryId":"438376","descriptiveAttributes":{},"imperial":"Wysokość: 22 7/8 \"<br/>Szerokość: 28 3/8 \" / 28 3/8 \"<br/><br/>","custMaterials":"Części główne: Płyta pilśniowa, sklejka brzozowa, Bezbarwny lakier akrylowy, farba<br/>drzw: Płyta pilśniowa, farba<br/>Okno: tworzywo akrylowe<br/>Zlewy/ Baterie/ Nóżka/ Uchwyt: Tworzywo polipropylenowe<br/>Rurka: stal, proszkowa powłoka<br/>Blat: tworzywo ABS (kopolimery akrylonitrylu, butadienu i styrenu), Tworzywo polipropylenowe<br/>"}]}};                
var jsonProduct = jProductData.product; 
</script>

1 个答案:

答案 0 :(得分:1)

您可以使用DOMXPath查找所有script代码,然后使用preg_match搜索脚本代码内容,以获取代码中的缩放部分,最后json_decode那是为了获得价值。

$str = <<<EOS
<html>
<head>
<script type="text/javascript" language="JavaScript">
var js_fn_MAX_NO_OF_LISTS = "10";
var jProductData = {"product":{"partNumber":"16538 [GENERICPRODUCT]","attributes":[{"type":"00018","name":"kolor","id":"796491"},{"type":"00019","name":"rozmiar","id":"796492"}],"catEntryId":"502710","items":[{"designerThoughts":{"heading":"Projektant Mikael Warnhammar","text":""},"californiaTitle20Product":false,"prices":{"hasPrfCharge":false,"enablenlpinterval":0,"hasEcoFee":false,"normal":{"priceNormalPerUnit":{"unit":""},"priceNormal":{"rawPrice":349,"value":"349 PLN ","priceExclVat":"283,74 PLN "},"priceNormalDual":{}},"isUnitPricePrimary":false,"usesUnitPriceMeasure":false,"hasTemporaryFamilyOffer":false,"hasFamilyPrice":false,"comparisonPriceExists":false},"images":{"large":["/pl/pl/images/products/duktig-kuchnia-do-zabawy__0086283_PE214923_S4.JPG","/pl/pl/images/products/duktig-kuchnia-do-zabawy__0168089_PE266789_S4.JPG"],"thumb":["/PIAimages/0086283_PE214923_S2.JPG"],"small":["/PIAimages/0086283_PE214923_S1.JPG"],"normal":["/PIAimages/0086283_PE214923_S3.JPG","/PIAimages/0168089_PE266789_S3.JPG"],"zoom":["/PIAimages/0086283_PE214923_S5.JPG","/PIAimages/0168089_PE266789_S5.JPG"]},"buyable":false,"metric":"Wysokość: 58 cm<br/>Szerokość: 72 cm / 72 cm<br/><br/>","custBenefit":"<cbs><cb><t>Zachęca do odgrywania scenek rozwijając u dzieci umiejętności społeczne poprzez naśladowanie dorosłych i wymyślanie swoich własnych ról.<\/t><\/cb><cb><t>Włączone diody płyty grzewczej świecą jak w prawdziwej kuchence, ale nie nagrzewają się. Diody można dowolnie włączać i wyłączać.<\/t><\/cb><cb><t>Diody zasilane są przez baterie o niskim napięciu i wyłączają się automatycznie po paru minutach oszczędzając energię.<\/t><\/cb><cb><t>&quot;Rośnie&quot; razem z dzieckiem. 3 różne ustawienia wysokości nóg.<\/t><\/cb><\/cbs>","environment":"","availabilityUrl":"/pl/pl/catalog/availability/70129801/","packagePopupUrl":"/pl/pl/catalog/packagepopup/70129801/","url":"/pl/pl/catalog/products/70129801/","goodToKnow":"Baterie sprzedawane są oddzielnie, potrzebnych jest 6 sztuk baterii LR6 AA 1.5V.<br/>Diody świetlne są zasilane prądem o bardzo niskim napięciu i dlatego nie nagrzewają się.<br/>Można dodać górną sekcję mini kuchni i przybory kuchenne z serii DUKTIG.<br/>Zalecane dla dzieci od 3 lat<br/>","nopackages":"1","designer":"Mikael Warnhammar","techInfoArr":[],"careInst":"Przecierać czystą wilgotną tkaniną<br/>","validDesign":[],"goodToKnowPIP":"Diody świetlne są zasilane prądem o bardzo niskim napięciu i dlatego nie nagrzewają się.<br/>Można dodać górną sekcję mini kuchni i przybory kuchenne z serii DUKTIG.<br/>Zalecane dla dzieci od 3 lat<br/>","partNumber":"70129801","attachments":[{"type":"ASSEMBLY_INSTRUCTIONS","name":"Instrukcja montażu","atcharray":[{"attachmentName":"DUKTIG Kuchnia do zabawy","articleNumber":"70129801","attachmentPath":"/pl/pl/assembly_instructions/duktig-kuchnia-do-zabawy__AA-372779-4_pub.pdf"}]},{"type":"MANUALS","name":"Instrukcja","atcharray":[{"attachmentName":"DUKTIG Kuchnia do zabawy","articleNumber":"70129801","attachmentPath":"/pl/pl/manuals/duktig-kuchnia-do-zabawy__AA-896291-3_pub.pdf"},{"attachmentName":"DUKTIG Kuchnia do zabawy","articleNumber":"70129801","attachmentPath":"/pl/pl/manuals/duktig-kuchnia-do-zabawy__AA-905674-2_pub.pdf"}]}],"bti":false,"name":"DUKTIG","soldSeparately":"Baterie sprzedawane są oddzielnie, potrzebnych jest 6 sztuk baterii LR6 AA 1.5V.<br/>","reqAssembly":true,"metricPackageInfo":[{"quantity":"1","length":740,"width":390,"articleNumber":"70129801","weight":13900,"height":145}],"type":"Kuchnia do zabawy","dualCurrencies":false,"catEntryId":"438376","descriptiveAttributes":{},"imperial":"Wysokość: 22 7/8 \"<br/>Szerokość: 28 3/8 \" / 28 3/8 \"<br/><br/>","custMaterials":"Części główne: Płyta pilśniowa, sklejka brzozowa, Bezbarwny lakier akrylowy, farba<br/>drzw: Płyta pilśniowa, farba<br/>Okno: tworzywo akrylowe<br/>Zlewy/ Baterie/ Nóżka/ Uchwyt: Tworzywo polipropylenowe<br/>Rurka: stal, proszkowa powłoka<br/>Blat: tworzywo ABS (kopolimery akrylonitrylu, butadienu i styrenu), Tworzywo polipropylenowe<br/>"}]}};
var jsonProduct = jProductData.product;
</script>
</head>
<body>
Whatever...
</body>
</html>
EOS;

// Create a DOM object for the HTML
$dom = new DOMDocument();
$dom->loadHTML($str);

// Use an XPath to get all script tags on page
$xpath = new DOMXPath($dom);
$scripts = $xpath->query('//script');

// Loop through any found script tags
foreach ($scripts as $script) {
    // Store script tag contents into JavaScript source code variable
    $javaScriptSource = $script->nodeValue;

    // Find any "zoom":[...] string within the source code
    if (preg_match('/"zoom":\[.*?\]/', $javaScriptSource, $matches)) {
        // Turn "zoom":[...] string into a JSON object by adding {}
        $json = "{" . $matches[0] . '}';

        // Decode JSON into array
        $array = json_decode($json, true);

        // Get values from array
        echo $array['zoom'][0], PHP_EOL;
        echo $array['zoom'][1], PHP_EOL;
    }
}

或者你可以放弃花哨的DOMDocument东西并在整个页面源上做一个hackish preg_match_all

if (preg_match_all('/"zoom":\[.*?\]/', $str, $matches)) {
    foreach ($matches as $match) {
        // Turn "zoom":[...] string into a JSON object by adding {}
        $json = "{" . $match[0] . '}';

        // Decode JSON into array
        $array = json_decode($json, true);

        // Get values from array
        print_r($array['zoom']);
    }
}