dongzaotiao2863 2015-04-02 12:10
浏览 68
已采纳

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

Example:

"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"]

How to get all patch to jpg images? How find this part using PHP Simple HTML DOM Parser? I just have no idea to do this.

Source:

<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条回答 默认 最新

  • douyan1927 2015-04-02 12:30
    关注

    You may use a DOMXPath to find all script tags, then search the script tag contents with a preg_match to get the zoom part in the code and finally json_decode that to get the values.

    $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;
        }
    }
    

    Or you can just drop the fancy DOMDocument stuff and do a hackish preg_match_all on the whole page source:

    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']);
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)