我正在抓取的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。
答案 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