2015-11-16 2 views
3

Я пытаюсь очистить таблицу с помощью PHP, дело в том, что мне удалось ее очистить, но я получаю все на странице веб-страницы. Я не уверен, как я укажу, какие TD и/или TR я хочу очистить.Scrape specific <td> в таблице HTML

Вот код 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

+0

Существуют ли определенные идентификаторы, связанные со строками таблицы? – Rehmat

+0

Да, но у каждого из них разные имена, классы я хочу назвать: club-row1,2,3,4,5,6 и т. Д., А классы называются: col-club, col-p, col- d и т. д. Если это то, что вы имели в виду. – smokeyblunts

ответ

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> элементов, которые вы упомянули о различных классах. Вы можете разделить их запятой на «и». (Дайте мне td.col-клуб И td.col-р И ...)

В foreach петли просто ходить через эти разобранные элементы DOM и добавление их InnerText в массив. После этого вы можете делать все, что захотите.

+0

Спасибо за ответ, возможно, слишком свеж для простой HTML DOM, чтобы понять этот код, я посмотрю и попробую его в любом случае! – smokeyblunts

+0

Просто посмотрел на отредактированную версию, также отлично работает! огромное спасибо. – smokeyblunts

+0

Я только что протестировал и обновил свой ответ. Взгляните и попробуйте! –

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> 
+0

Спасибо за ответ! Работал как шарм. – smokeyblunts

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); 

Это то, что я хотел бы сделать

EDIT: проникающую часть:

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

EDIT: Забыли экстрагирование внутренний текст ~

+0

Спасибо за ответ, есть ли способ, которым я могу повторить это и посмотреть, как он выглядит? – smokeyblunts

+0

часть var_dump будет отражать все, правый исходный код щелчка мыши в вашем браузере, чтобы увидеть, что выходной файл также добавил, как перебирать массив через массив. – Elentriel

+0

Хорошо, я забыл фактически извлечь внутренний текст и просто поместить весь объект в массив, теперь это должно сделать трюк – Elentriel

Смежные вопросы