如何使用 PHP 抓取 HTML 表格数据

编辑:没有说清楚。我正在使用 PHP


我正在尝试创建一个现代化的 Boxrec 网站,我正在从维基百科抓取数据。在拳击手的每个维基百科页面中,都有一张他们的比赛表格。我已经成功地从另一个表中提取了胜利、失败和平局数据。我如何使用 PHP 将战斗表数据提取到某种(2D?)纯文本数组中?


这是该表的链接(这是第二个表,较大的一个) https://en.wikipedia.org/wiki/Sugar_Ray_Robinson#Professional_boxing_record


这是我尝试过的代码(我可能完全不同意这个)


$dom = new domDocument;


$dom->loadHTML($table);

$dom->preserveWhiteSpace = false;

$tables = $dom->getElementsByTagName('table');


$rows = $tables->item(1)->getElementsByTagName('tr');


foreach ($rows as $row) {

        $cols = $row->getElementsByTagName('td');

        echo $cols[2];

}

这给了我


警告: DOMDocument::loadHTML():意外的结束标记:实体中的 div,第 38 行 C:\xampp\htdocs\boxing\search\index.php 中的第 4375 行


MMTTMM
浏览 123回答 1
1回答

忽然笑

我看到的几个问题:$tables->item(1)->getElementsByTagName('tr');将始终为您提供页面中的第二个表格,该表格将是右侧个人统计数据块中的表格由于$cols[2]不是简单类型的对象,您将收到警告而不是内容。用于echo $cols[2]->textContent输出内部文本。我建议加载所有表,然后根据结果表中不同的表标题进行检查(如果您正在解析结果表)。然后提取适当的列。示例代码:下面的代码仅显示如何检查表中的示例标题“Result”,然后输出结果列。请根据您的预期目的进行调整。<?php$table = file_get_contents('https://en.wikipedia.org/wiki/Sugar_Ray_Robinson');$dom = new DOMDocument;$dom->loadHTML($table);$dom->preserveWhiteSpace = false;$tables = $dom->getElementsByTagName('table');foreach ($tables as $singleTable) {&nbsp; &nbsp; try {&nbsp; &nbsp; &nbsp; &nbsp; $rows = $singleTable->getElementsByTagName('tr');&nbsp; &nbsp; &nbsp; &nbsp; // check if we are parsing the right table:&nbsp; &nbsp; &nbsp; &nbsp; $row1= $rows[0]->getElementsByTagName('th');&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; $isResultTable= FALSE;&nbsp; &nbsp; &nbsp; &nbsp; foreach ($row1 as $th) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (trim($th->textContent) === 'Result') {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $isResultTable = TRUE;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if (!$isResultTable) continue;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; foreach ($rows as $row) {&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $cols = $row->getElementsByTagName('td');&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; echo $cols[2]->textContent;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; } catch (Exception $ex) {&nbsp; &nbsp; &nbsp; &nbsp; print_r($ex);&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP