首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于PHP的数据抽取

基于PHP的数据抽取
EN

Stack Overflow用户
提问于 2014-05-15 09:26:53
回答 3查看 87关注 0票数 0

我刚开始使用PHP,得到一个任务似乎有点困难。我需要从这个页面中提取价格表body/prijzen/bezorgen/1052716#prijzen

到目前为止,我已经完成了代码:

代码语言:javascript
复制
<?php
include('simple_html_dom.php');
$url = 'http://www.kieskeurig.nl/spiegelreflexcamera/nikon/d3200_body/prijzen/bezorgen/1052716#prijzen';

$html = file_get_html($url);

foreach($html->find('table[id="priceTable"]') as $data) {
    foreach($data->find('img[width="150"]') as $d) {
        echo $d-> alt. "<br/>";
    }
}
foreach($html->find('div[class="il"]') as $d1) {
    foreach($d1->find('a[rel="nofollow"]') as $d2) {
        echo $d2-> innertext. "<br/>" ;
    }
}
?>

它给我的结果,但我想要的商店名称和相应的价格在同一排。它应该如下所示:

代码语言:javascript
复制
Digitalstreet  € 332,00 

Cameratop      € 332,00

但我得到的输出如下:

代码语言:javascript
复制
Digitalstreet
Cameratop 
€ 332,00
€ 332,00

有人能用这个指引我吗。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-05-15 10:03:50

我建议逐行抓取表行,然后找出每行的名称和价格。这样(如果缺少什么东西),您可以确定名称和价格是一致的。

代码语言:javascript
复制
<?php
include('simple_html_dom.php');
$url = 'http://www.kieskeurig.nl/spiegelreflexcamera/nikon/d3200_body/prijzen/bezorgen/1052716#prijzen';

$html = file_get_html($url);

foreach($html->find('table[id="priceTable"]') as $data) {
    foreach($html->find('tr') as $rowdata) {
        $name = 'unknown';
        $price = '-';
        foreach($rowdata->find('img[width="150"]') as $namedata) {
            $name = $namedata->alt;
        }
        foreach($rowdata->find('div[class="il"]') as $d) {
            foreach($d1->find('a[rel="nofollow"]') as $d2) {
                $price = $d2->innertext;
            }
        }

        echo $name.' '.$price.'<br/>';
    }
}
?>

当然,您可以将所有内容添加到数组中,而不是回显它,而且“默认值”也可以根据您的需要进行更改。

票数 0
EN

Stack Overflow用户

发布于 2014-05-15 09:36:57

我猜第一圈在价格上,第二圈在名字上。假设这两个列表总是大小相同的,那么您可以轻松地将信息存储在一个或多个数组中,并在以后循环它们。

代码语言:javascript
复制
<?php
include('simple_html_dom.php');
$url = 'http://www.kieskeurig.nl/spiegelreflexcamera/nikon/d3200_body/prijzen/bezorgen/1052716#prijzen';

$html = file_get_html($url);

$prices = array();
$names = array();

foreach($html->find('table[id="priceTable"]') as $data) {
    foreach($data->find('img[width="150"]') as $d) {
        $prices[] = $d->alt;
    }
}
foreach($html->find('div[class="il"]') as $d1) {
    foreach($d1->find('a[rel="nofollow"]') as $d2) {
        $names[] = $d->alt;
    }
}

foreach ($names as $key => $name)
{
    echo "$name: " . $prices[$key];
}

我不能测试这是否有效,但它应该会帮助你得到正确的想法。

票数 0
EN

Stack Overflow用户

发布于 2014-05-15 09:37:08

我不知道数组是什么样子。您可以做的是将结果添加到数组中,并循环任何一个数组。

例如:

代码语言:javascript
复制
foreach($html->find('table[id="priceTable"]') as $data) {
foreach($data->find('img[width="150"]') as $d){
    $price[] = $d->alt; 
}}
foreach($html->find('div[class="il"]') as $d1){
foreach($d1->find('a[rel="nofollow"]') as $d2){
   $camName[] = $d2->innertext;
}
}
// now loop through the array
echo "<table>"
foreach($camname as $key=>$name){
   echo "<tr><td>{{$name}}</td><td>{{$price[$key]}}</td></tr>";
}
echo "</table>";
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23674248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档