Php 我够不到桌子上的td标签

Php 我够不到桌子上的td标签,php,laravel,domparser,Php,Laravel,Domparser,我抓不到桌子的td标签。我试着第一个是td属性,第二个是价值。这是网站: https://www.mecsumai.com/bkn-summary/?bid=16076001&bg1=026937&bg2=dce8e2&wdt=100%25&aln=center&newid=06076001 我的foreach代码是: $allTables = $DOMParser->getElementsByTagName('table'); f

我抓不到桌子的td标签。我试着第一个是td属性,第二个是价值。这是网站:

https://www.mecsumai.com/bkn-summary/?bid=16076001&bg1=026937&bg2=dce8e2&wdt=100%25&aln=center&newid=06076001
我的foreach代码是:

$allTables = $DOMParser->getElementsByTagName('table');
        foreach ($allTables as $table) {
            foreach ($table->getElementsByTagName('tr') as $tr) {
                $tds = $tr->getElementsByTagName('td');
                if ($tds->length == 2) {
                    $property = trim($tds->item(0)->nodeValue);
                    $value = trim($tds->item(1)->nodeValue);

                    switch ($property) {
                        case '販売価額':
                            $changeForMyDB['price'] = $value;
                            break;
                        case '所在地':
                            $changeForMyDB['address'] = $value;
                            break;
                        case '総戸数':
                            $changeForMyDB['hows_old'] = $value;
                            break;
                        case '間取り':
                            $changeForMyDB['rooms'] = $value;
                            break;
                        case '建物竣工':
                            $changeForMyDB['old'] = $value;
                            break;
                        case '入居(予定)日':
                            $changeForMyDB['entery'] = $value;
                            break;
                        case 'バルコニー面積':
                            $changeForMyDB['balcon_m2'] = $value;
                            break;
                        case '管理会社':
                            $changeForMyDB['company_name'] = $value;
                            break;
                        case '物件名':
                            $changeForMyDB['name'] = $value;
                            break;
                        case '専有面積':
                            $changeForMyDB['extend'] = $value;
                            break;

                        default:
                            # code...
                            break;
                    }
                }
            }
        }

        Estates::insertGetId($changeForMyDB);
        $this->line('DATA saved.');
    }
}
}
我更新了代码,没有错误,但仍然无法获取数据。 我做错了什么? 有什么想法吗?谢谢大家!

您不能作为数组直接访问DOMNodeList,但您有一种访问节点的等效方法。我还添加了一些延迟检查,以确保tr至少有两个与属性和值对应的元素:

$dom = DOMDocument::loadHTMLFile("https://www.mecsumai.com/bkn-summary/?bid=16076001&bg1=026937&bg2=dce8e2&wdt=100%25&aln=center&newid=06076001");

$allTables = $dom->getElementsByTagName('table');
foreach ($allTables as $table){
    foreach ($table->getElementsByTagName('tr') as $tr){
        $tds = $tr->getElementsByTagName('td');
        if ($tds->length == 2) {
            $property = trim($tds->item(0)->nodeValue);
            $value = trim($tds->item(1)->nodeValue);
            $d[$property] = $value;
        }
    }
    if (isset($d)) {
        echo "Keys: " .  count($d) . "\n";
        unset ($d);
    }
}
输出:

Keys: 31
Keys: 27
Keys: 30

该页面上没有th元素,因此您永远不会进入交换机…伙计,有什么帮助来解决该问题吗?我将th改为td,并将其改为number。但是没有改变,@msgI改变了表的部分,就像你说的,但是这次我得到了一个错误:调用未定义的方法DOMNodeList::getElementsByTagName更新了问题!您可以查看我是如何更改它的。在这部分中,foreach$table->getElementsByTagName'tr'作为$tr{好的,伙计,我现在没有收到错误,但仍然无法获得数据,我更新了问题代码。你也可以检查。顺便说一句,谢谢你帮我。我已经检查过了,伙计,我收到了保存在终端上的数据,但当我检查数据库时,没有数据。你是说每个周期都可以。那么问题一定是什么问题否则…正如我所说,检查它没有数据:我认为foreach循环不起作用