PHP 简单 DOMDocument 抓取排除 td 类

标签 php html web-scraping domdocument

我只是想获取所有 <td>驻留在内部的元素数据 <tr>元素。我的问题是因为我试图抓取表结构,我需要排除所有具有属性 COLLSPAN 的元素。即<td collspan = 12> 从下面的代码中可以看出,获取表数据非常简单,但由于表结构,我需要排除所有 collspan 属性。

<?php

$html = file_get_contents('http://www.superxv.com/fixtures/'); //get the html returned from the following url

$game_doc = new DOMDocument();
libxml_use_internal_errors(TRUE); //disable libxml errors
if(!empty($html)) { //if any html is actually returned
    $game_doc->loadHTML($html);
    libxml_clear_errors(); //remove error
    $xpath = new DOMXPath($game_doc);

    // Modify the XPath query to match the content
    foreach ($xpath->query('//table')->item(0)->getElementsByTagName('tr') as $rows) {
        $cells = $rows->getElementsByTagName('td');
        //$cells2 = $rows->getElementsByTagName('th');
        echo '<pre>';
         //@ signs are added due to table structure
        //Get scrapped columns
        echo $dayDateBye[] = $cells->item(0)->textContent;
        echo $homeTeam[] = $cells->item(1)->textContent;
        echo $awayTeam[] = $cells->item(2)->textContent;
        echo $venue[] = $cells->item(3)->textContent;
        echo $timeGMT[] = $cells->item(5)->textContent;
        echo $timeZA[] = $cells->item(10)->textContent;
        echo '</pre>';
    }
}

在这里您可以看到表格结构,它显示了 5 奇数行灯具,然后在新的一周开始时更改结构。我可以识别以跳过此结构更改的元素都是 <td collspan = 12>元素。这使得它变得棘手,因为 TD 元素没有类名,只有用于标识它的元素。

enter image description here

enter image description here

任何意见表示赞赏。

最佳答案

你可以根据标签的长度跳过那些

<?php

$html = file_get_contents('http://www.superxv.com/fixtures/'); //get the html returned from the following url

$game_doc = new DOMDocument();
libxml_use_internal_errors(TRUE); //disable libxml errors
if(!empty($html)) { //if any html is actually returned
    $game_doc->loadHTML($html);
    libxml_clear_errors(); //remove error
    $xpath = new DOMXPath($game_doc);

    // Modify the XPath query to match the content
    foreach ($xpath->query('//table')->item(0)->getElementsByTagName('tr') as $rows) {
        $cells = $rows->getElementsByTagName('td');
        if( $cells->length > 1 ){
            //$cells2 = $rows->getElementsByTagName('th');
            echo '<pre>';
             //@ signs are added due to table structure
            //Get scrapped columns
            echo $dayDateBye[] = $cells->item(0)->textContent;
            echo $homeTeam[] = $cells->item(1)->textContent;
            echo $awayTeam[] = $cells->item(2)->textContent;
            echo $venue[] = $cells->item(3)->textContent;
            echo $timeGMT[] = $cells->item(5)->textContent;
            echo $timeZA[] = $cells->item(10)->textContent;
            echo '</pre>';
        }
    }
}

?>

关于PHP 简单 DOMDocument 抓取排除 td 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48017276/

相关文章:

php - CSS:动态类/属性和媒体查询——如何解决这个难题?

php - 删除临时符号链接(symbolic link)是否会中断当前对该符号链接(symbolic link)的下载/访问?

javascript - 显示未定义的 js 函数的控制台日志

html - 为什么我的CSS交错?

python - 使用多线程优化 python 脚本

php - 尝试通过 fetch_object() 将 COUNT 用作 SQL 查询,但它不起作用

javascript - 生成的 Javascript 不执行

c# - 如何使用 C# 从 html 页面中抓取文本?

c# - 如何使用 C# 调用没有名称的 Javascript

php - mysql php jquery 隐藏显示选择