Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过PHP从特定HTML表中提取数据_Php_Html_Dom - Fatal编程技术网

如何通过PHP从特定HTML表中提取数据

如何通过PHP从特定HTML表中提取数据,php,html,dom,Php,Html,Dom,我想知道如何从HTML文档的特定表中获取信息?现在,我正在从整个页面中提取所有数据,但我只需要id为team\u batting的表中的数据。这将如何实现?这是我的密码: $dom = new DOMDocument(); $html = file_get_contents('https://www.baseball-reference.com/register/team.cgi?id=41270199'); @$dom->loadHTML($html); $table = $dom-&

我想知道如何从HTML文档的特定表中获取信息?现在,我正在从整个页面中提取所有数据,但我只需要id为
team\u batting
的表中的数据。这将如何实现?这是我的密码:

$dom = new DOMDocument();
$html = file_get_contents('https://www.baseball-reference.com/register/team.cgi?id=41270199');
@$dom->loadHTML($html);

$table = $dom->getElementByID('team_batting');

$stats = $dom->getElementsByTagName("td");

for ($i = 0; $i < $stats->length; $i++) {

    $attr = $stats->item($i)->getAttribute('data-stat');

    if ($attr != 'player') {
        continue;
    }

    $nodes[] = $stats->item($i)->textContent;

    foreach($nodes as $node) {
        echo $node;
        echo '<br>';
    }

}
$dom=newdomdocument();
$html=文件\u获取\u内容('https://www.baseball-reference.com/register/team.cgi?id=41270199');
@$dom->loadHTML($html);
$table=$dom->getElementByID('team_batting');
$stats=$dom->getElementsByTagName(“td”);
对于($i=0;$i<$stats->length;$i++){
$attr=$stats->item($i)->getAttribute('data-stat');
如果($attr!=“玩家”){
继续;
}
$nodes[]=$stats->item($i)->textContent;
foreach($node作为$node){
echo$节点;
回声“
”; } }

有了这个,我可以从
data stat=“player”
属性中提取所有球员的名字,但我只想在
team\u batting
表中应用它。如何执行此操作?

警告:使用错误抑制YOLO运算符(
@
)会掩盖代码中的问题,并使调试问题变得更加复杂。这是最后手段,只能在特殊情况下使用。您应该为用户显示一条错误消息,记录一个问题,启动某种重试,或者同时执行所有这些操作?也就是说,在该行中用
$table
替换
$dom
。我尝试了这个,它仍然从页面中提取所有球员的名字。通过一些测试,我发现两个版本实际上对我都很好,只列出了击球手。问题是您的输出循环在主循环中,所以它输出一个名称,然后两个名称,然后三个名称,等等。?(也就是说,当它找到三个玩家时,它输出了6个名字,第一个玩家被列出了三次。)是的,这就是问题所在,谢谢!