如何使用PHP刮取HTML表数据
编辑:没有说清楚。我正在使用PHP 我正在尝试创建一个现代化的Boxrec网站,我正在从维基百科中收集数据。在每一个拳击手的维基百科页面上,他们都有一张他们的比赛表格。我已经成功地从另一个表中提取了赢、输和抽数据。如何使用PHP将战斗表数据提取到某种纯文本(2D?)数组中 这是一个表的链接(第二个表,较大的一个) 这是我尝试过的代码(我可能完全不喜欢这个) 这给了我 警告:DOMDocument::loadHTML():意外的结束标记:实体中的div, 第38行C:\xampp\htdocs\boxing\search\index.php中的第4375行如何使用PHP刮取HTML表数据,php,html,Php,Html,编辑:没有说清楚。我正在使用PHP 我正在尝试创建一个现代化的Boxrec网站,我正在从维基百科中收集数据。在每一个拳击手的维基百科页面上,他们都有一张他们的比赛表格。我已经成功地从另一个表中提取了赢、输和抽数据。如何使用PHP将战斗表数据提取到某种纯文本(2D?)数组中 这是一个表的链接(第二个表,较大的一个) 这是我尝试过的代码(我可能完全不喜欢这个) 这给了我 警告:DOMDocument::loadHTML():意外的结束标记:实体中的div, 第38行C:\xampp\htdocs\
我看到几个问题:
$tables->item(1)->getElementsByTagName('tr')
将始终为您提供页面中的第二个表,即右侧Personal stats块中的表$cols[2]
不是简单类型的对象,因此您将收到警告,而不是内容。使用echo$cols[2]->textContent
输出内部文本<?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) {
try {
$rows = $singleTable->getElementsByTagName('tr');
// check if we are parsing the right table:
$row1= $rows[0]->getElementsByTagName('th');
$isResultTable= FALSE;
foreach ($row1 as $th) {
if (trim($th->textContent) === 'Result') {
$isResultTable = TRUE;
}
}
if (!$isResultTable) continue;
foreach ($rows as $row) {
$cols = $row->getElementsByTagName('td');
echo $cols[2]->textContent;
}
} catch (Exception $ex) {
print_r($ex);
}
}
我发现了几个问题:
$tables->item(1)->getElementsByTagName('tr')
将始终为您提供页面中的第二个表,即右侧Personal stats块中的表
由于$cols[2]
不是简单类型的对象,因此您将收到警告,而不是内容。使用echo$cols[2]->textContent
输出内部文本
如果您正在分析结果表,我建议加载所有表,然后根据结果表中不同的表标题进行检查。然后提取相应的列
示例代码:
下面的代码仅显示如何检查表中的示例标题“Result”,然后将输出results列。请根据你想要的目的调整它
<?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) {
try {
$rows = $singleTable->getElementsByTagName('tr');
// check if we are parsing the right table:
$row1= $rows[0]->getElementsByTagName('th');
$isResultTable= FALSE;
foreach ($row1 as $th) {
if (trim($th->textContent) === 'Result') {
$isResultTable = TRUE;
}
}
if (!$isResultTable) continue;
foreach ($rows as $row) {
$cols = $row->getElementsByTagName('td');
echo $cols[2]->textContent;
}
} catch (Exception $ex) {
print_r($ex);
}
}
编辑的原始帖子看起来您的HTML无效:DOMDocument::loadHTML():意外的结束标记…
只是想跟进一下:您有机会尝试发布的代码吗?非常好,非常感谢您编辑的原始帖子看起来您的HTML无效:DOMDocument::loadHTML():意外的结束标记…
只是为了跟进:您有机会尝试发布的代码吗?工作非常好,非常感谢