在 HTML table 中抓取特定 <td>
Scrape specific <td> in HTML table
我正在尝试使用 PHP 抓取 table,问题是我已经设法抓取了它,但我得到了 everything网页的 table。我不确定如何指定要抓取的 TD and/or 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)是:
俱乐部名称、出场、获胜、失败、进球、失球、净胜球和积分。
我得到的是table中的所有内容,包括崩溃的团队信息。看起来像这样(不确定图片是否是 post 的最佳方式,但我不确定如何以另一种方式显示它,我突出显示了我真正想要抓取的部分):
可能会围绕这个解决方案进行一些尝试,可能会产生适合您的结果。我试过 class 并且它正在获取一行的结果。查看是否是您要找的解决方案:
<?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>
$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>";
}
编辑:
忘记提取内文了~
您是否尝试查看 Simple HTML DOM Parser 的高级用法?
我是根据上面link的手册写的;它可能会让你朝着正确的方向前进:
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>
元素的 class 为 club-row
(添加 .
表示 class);此外,您只需要嵌套在 <table>
和 class leagueTable
中的行。这就是第一个 find 所做的。 table 之后的 space 表示您想要它的后代。
接下来,您需要 <td>
个具有您提到的各种 class 元素的元素。您可以用逗号分隔它们以表示 "and"。 (给我 td.col-club AND td.col-p AND...)
foreach
循环只是遍历那些已解析的 DOM 元素并将它们的内部文本添加到数组中。之后你可以为所欲为。
我正在尝试使用 PHP 抓取 table,问题是我已经设法抓取了它,但我得到了 everything网页的 table。我不确定如何指定要抓取的 TD and/or 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)是: 俱乐部名称、出场、获胜、失败、进球、失球、净胜球和积分。
我得到的是table中的所有内容,包括崩溃的团队信息。看起来像这样(不确定图片是否是 post 的最佳方式,但我不确定如何以另一种方式显示它,我突出显示了我真正想要抓取的部分):
可能会围绕这个解决方案进行一些尝试,可能会产生适合您的结果。我试过 class 并且它正在获取一行的结果。查看是否是您要找的解决方案:
<?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>
$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>";
}
编辑: 忘记提取内文了~
您是否尝试查看 Simple HTML DOM Parser 的高级用法?
我是根据上面link的手册写的;它可能会让你朝着正确的方向前进:
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>
元素的 class 为 club-row
(添加 .
表示 class);此外,您只需要嵌套在 <table>
和 class leagueTable
中的行。这就是第一个 find 所做的。 table 之后的 space 表示您想要它的后代。
接下来,您需要 <td>
个具有您提到的各种 class 元素的元素。您可以用逗号分隔它们以表示 "and"。 (给我 td.col-club AND td.col-p AND...)
foreach
循环只是遍历那些已解析的 DOM 元素并将它们的内部文本添加到数组中。之后你可以为所欲为。