首页 > 解决方案 > 使用 simple_hml_dom 从站点提取数据的问题

问题描述

这是我要从中提取文本的网站: https ://www.tradesquare.com.au/milano-decor-eden-gas-lift-bed-with-headboard-platform-storage-dark-grey-fabric-queen -深灰色.html

我想提取 sku 编号,这是在浏览器中看到的如下文本,但我得到的似乎是产品 ID,而不是 sku 本身。

<div class="product attribute sku">
            <strong class="type">sku</strong>
        <div class="value" itemprop="sku">9724e130</div>

我的问题是,使用 simple_html_code 的正确代码应该是什么?

'div#[class="product attribute sku"] div';用来提取文本,它可以工作,但它给了我这个:dc6a2744

感谢对我的问题的回答。

这是我的 php 程序的一部分,用于提取上述问题中的 sku:

<?php
    $user_agent ='Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (K HTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36';
    $curl = curl_init();
    $link = "https://www.tradesquare.com.au/milano-decor-eden-gas-lift-bed-with-headboard-platform-storage-dark-grey-fabric-queen-dark-grey.html";
    curl_setopt($curl, CURLOPT_URL, $link);
    curl_setopt($curl, CURLOPT_USERAGENT, $user_agent);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); //
    curl_setopt($curl, CURLOPT_HEADER, false);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($curl, CURLOPT_REFERER, $link);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
    $str = curl_exec($curl);
    curl_close($curl);

    include 'simple_html_dom.php';

    $all = new simple_html_dom();
    $all->load($str);

    $sku = trim($all->find('div[class="product attribute sku"] [itemprop="sku"]', 0)->plaintext);
    echo $sku;
    
    $all->clear(); 
    unset($all);
    exit;
?>

这行得通,事实上我已经有一些复杂的工作查询,但正如我所解释的,在这种情况下,它只提取产品 id,而不是浏览器中可见的 sku,所以我寻求帮助来指导我一个正确的方向。谢谢。

标签: web-scrapingsimple-html-dom

解决方案


[编辑 2] 最终答案

由于第一次调用没有生成寻找的值,因此无法通过 php.ini 访问它。加载整个页面时的客户端后期操作将能够完成这项工作。

原始答案

据我所知,simple_html_dom使用jquery/css符号进行选择。

您可以使用:

div[class='product attribute sku'] div

或者 :

div[class='product attribute sku'] [itemprop='sku']

瞄准你的div:)

[编辑 1]

请试试

$sku = trim($all->find('div[class="product attribute sku"] [itemprop="sku"]', 0)->innertext);

我在我的测试服务器上得到了很好的结果:)


推荐阅读