在HTML表格中特定的Scrape

时间:2015-11-16 13:59:44

标签: php html html-table simple-html-dom scrape

我正在尝试使用PHP抓一张桌子,事情就是我已经成功抓住了它,但我在网页的桌子上得到了所有。我不确定如何指定哪些TD和/或TR我想要刮掉。

这是PHP代码

<?php
include("simple_html_dom.php");
$html=file_get_html("http://www.premierleague.com/en-gb/matchday/league-table.html");
$html=new simple_html_dom($html);

foreach($html->find('table tr') as $row) {
$cell = $row->find('td', 0);
echo $row;
}
?>

我想得到的(如果您查看the website)是:  俱乐部名称,比赛,赢球,输球,进球,进球,球门差异和得分。

我得到的是表格中的所有内容,包括折叠的团队信息。它看起来像这样(不确定图片是否是发布它的最佳方式,但我不确定如何以另一种方式显示它,我突出显示了我实际想要刮掉的部分):

Picture

3 个答案:

答案 0 :(得分:2)

您是否尝试过查看Simple HTML DOM Parser的高级用法?

我是根据上面链接中的手册写的;它可能会让你朝着正确的方向前进:

require "simple_html_dom.php";

$html=file_get_html("http://www.premierleague.com/en-gb/matchday/league-table.html");
$html=new simple_html_dom($html);

$rows = array();
foreach($html->find('table.leagueTable tr.club-row') as $tr){
    $row = array();
    foreach($tr->find('td.col-club,td.col-p,td.col-w,td.col-l,td.col-gf,td.col-ga,td.col-gd,td.col-pts') as $td){
        $row[] = $td->innertext;
    }
    $rows[] = $row;
}
var_dump($rows);

基本上,您希望所有<tr>元素具有club-row类(添加.表示类);此外,您只需要嵌套在<table>leagueTable内的行。这是第一个发现的行为。表格后面的空格表示你想要它的后代。

接下来,您需要具有您提到的各种类的<td>个元素。您可以用逗号分隔这些来表示&#34;和&#34;。 (给我td.col-club AND td.col -p AND ...

foreach循环只是遍历那些解析过的DOM元素并将它们的innertext添加到数组中。之后你可以随心所欲地做任何事情。

答案 1 :(得分:1)

可能会围绕这个解决方案玩一下可能会为您产生结果。我已经尝试了一个类,它正在获取一行的结果。检查它是否是您正在寻找的解决方案:

<?php
    $grab = file_get_contents("http://www.premierleague.com/en-gb/matchday/league-table.html");
    $first = explode( '<td class="col-sort">' , $grab );
    $second = explode("</td>" , $first[1] );
?>
<table style="width:80%">
  <tr>
    <td><?php echo $second["1"];?> (LP)</td>
    <td><?php echo $second["2"];?> (Club)</td>
    <td><?php echo $second["3"];?> (P)</td>
    <td><?php echo $second["4"];?> (W)</td>
    <td><?php echo $second["5"];?> (D)</td>
  </tr>
</table>

答案 2 :(得分:1)

$output = array();
foreach($html->find('table',0)->find('tr') as $row) {
$club = $row->find('.col-club', 0);
$p = $row->find('.col-p', 0);
$output[] = array("club" => $club->innertext , "p" => $p->innertext);
}
var_dump($output);

这就是我要做的事情

编辑:遍历部分:

foreach($output as $row)
{
foreach($row as $key => $value)
{ 
 echo $key ."|||" . $value ."</br>";
}
echo "</br>";
}

编辑: 忘了提取innertext~