0

我有一个 HTML 页面的 URL,其中显示了一些产品(钢笔、T 恤等)和库存(仓库中的产品)。

我需要获取(窃取)与产品相对应的特定 SKU_CODE 的库存,因为我已经通过电子邮件与他们进行了交谈,并且他们没有包含库存的 .CSV / .TXT 或 Excel 文件。所以我需要从动态 URL 加载 HTML 并使用 preg_match_all 解析它以获取外部库存,然后将其显示在我的网站页面上,对应于特定产品。

这类似于从银行网站获取当前货币平价,当您需要将其放在您的网站上时,如果您手动编码。

所以这就是我的代码,它只工作了一半。我设法在页面上找到了 SKU_CODE,但是当我查找库存值时,如果我执行 print_r,它会显示 Array(),然后我无法保留该数组的任何值。我将在下面发布我的代码。

$code = 'AP731463-10'; $code_minimized = explode("-", $code);

$url_to_get = 'http://www.andapresent.hu/index.php?term_idk_list=4776829&term_idk_l=&filt=&qs='.$code_minimized[0].'';

function findinside($start, $end, $string) {
    preg_match_all('/' . preg_quote($start, '/') . '([^\.)]+)'. preg_quote($end, '/').'/i', $string, $m);
    return $m[1];
}


    $array_lines = file($url_to_get);
    //echo($array_lines[1654]);

    $cont = 0;
    $found_match = 0;

    while(isset($array_lines[$cont])){

        //daca inca nu s-a gasit codul cautat, cauta-l intre <b> </b>
        //if code we're looking for is not yet found, search between <b> </b>

        if($found_match==0){
            $out = findinside('<b>','</b>', $array_lines[$cont]);
        }

        //o data ce s-a gasit, flag set ca sa nu-l mai caute inca o data
        //once found, set flag $found_match so it will not look for it next time
        if($out[0]==$code && $found_match==0){
            $found_match = 1;
            echo "Found match : ".$code." = ".$out[0]."<br>";
        }

        //daca e flag-ul gasit e setat, cauta next info (stock-ul) pana il gaseste in $array_lines[$cont]
        //if flag is already set, look for next info (the stock value of the product)
        if($found_match==1){
            $out_2 = findinside('<td class="szoveg_k" align="center">','</td>', $array_lines[$cont]);
            echo $out_2;
        }


        $cont++;
    }
4

1 回答 1

0

您正在逐行阅读 HTML 页面并一次搜索一行。但是,如果您要查找<td>的开盘价和收盘</td>价出现在不同的行上怎么办?我认为这就是您的函数没有返回正确结果的原因。

但是,考虑到您的任务,我认为使用 XPpath 搜索股票价值会更合适。看看这个教程,看看它是否有帮助!

于 2012-08-09T10:41:15.610 回答