简单的HTML DOM从特定内容所在的tr获取td内容

时间:2013-03-12 11:25:04

标签: php simple-html-dom

我正在抓取的HTML看起来像这样

<div id="table"><table>
<tr><td>Clubname</td><td>15</td><td>30</td></tr>
<tr><td>Clubname 2</td><td>15</td><td>30</td></tr>
<tr><td>Clubname 3</td><td>15</td><td>30</td></tr>
</table></div>

我想要的是找到Clubname 2所在的tr并从td [1]和td [2]获取数据并输出。

我想用simple_html_dom.php

完成这项工作

我已经拥有的是

require('simple_html_dom.php');
$html = file_get_html('webpage.html');
foreach($html->find('div#table') as $e)
echo $e->innertext . '<br>';

如何找到特定的俱乐部名称并从同一个tr中获取td的具体内容?

=============================================== ==================================

好的,谢谢,我现在所做的就像你告诉我的那样,只有变量,因为后来我想使用变量。

<?php
    $clubname = 'Ajax';
    require('phpQuery/phpQuery.php');         
    $result = array();
    $limit = 2; //you need only the next two sibling

    $dom = phpQuery::newDocumentFile('http://soccer.gijsve.nl/test2.php');        
    $match = $dom->find('td:contains("'.$clubname.'")');        
    while( 0 < count( $match = $match->next() ) && ( 0 < $limit-- )  ){
            $result[] = $match->text();
    }
    var_dump($result);

?>

我现在想要的是选择第一个td(匹配前的td)和第四个和第五个。因为我需要知道得分的目标,得分和等级。有关我正在抓取的表格,请参阅http://soccer.gijsve.nl/test2.php

2 个答案:

答案 0 :(得分:2)

我建议您使用其他简单的DOM工具:      http://code.google.com/p/phpquery/ 正如我所表达的那样,它有点快,选择器工作得更好。这个项目没有完成喷射。但dom阅读部分效果很好。 选择器像jQuery一样工作;)

<?php
    require('phpquery/phpQuery.php');         
    $result = array();
    $limit = 2; //you need only the next two sibling

    $dom = phpQuery::newDocumentFile('webpage.html');        
    $match = $dom->find('td:contains("Clubname 2")');        
    while( 0 < count( $match = $match->next() ) && ( 0 < $limit-- )  ){
            $result[] = $match->text();
    }
    var_dump($result);

    // other example:
    $match = $dom->find('td:contains("Clubname 2")');        
    $loses = $match->siblings('.loses')->text(); //matches the siblings of the $match element, and has loses class
    $wins = $match->siblings('.wins')->text(); //matches the siblings of the $match element, and has wins class

?>

这适用于您的示例html,以及您评论的完整HTML。

使用simple_html_dom,您可以搜索文本,作为文本“标记”:

$textlist = $html->find('text');

这将返回所有文本块,你应该运行$ textlist,如果elemnt的html等于你找到的,你将它保存到变量,然后退回到它的父级(在完整的html中) ,第二个父母)比步骤到下一个兄弟,再次下一个兄弟,我认为比用phpQuery更复杂。

答案 1 :(得分:1)

Phpquery也有兄弟选择器,让生活更轻松:

$dom->find('td:contains("Clubname 2") + td')->text(); # 15
$dom->find('td:contains("Clubname 2") + td + td')->text(); # 30
$dom->find('td:contains("Clubname 2") ~ td')->text(); # 15 30