2011-06-01 48 views
0

嘿所有, 我已經成功創建了一個網站刮板從記錄行業網站獲得前40名,但我刮的表格中的一列可能有時不在那裏。基本上,我需要的是一種從我刮除去此的任何實例:刪除刮從

<td><img src="/images/bullet_red.gif" width="8" height="8" title="Red Dot" /></td> 

下面是我從一個教程走到這一步。

$url = "http://www.ariacharts.com.au/pages/charts_display_singles.asp?chart=1U50"; 
$raw = file_get_contents($url); 
$newlines = array("\t","\n","\r","\x20\x20","\0","\x0B"); 

$content = str_replace($newlines, "", html_entity_decode($raw)); 

$start = strpos($content,'<table class="chartTable"'); 
$end = strpos($content,'</table>',$start) + 8; 

$table = substr($content,$start,$end-$start); 

preg_match_all("|<tr(.*)</tr>|U",$table,$rows); 

foreach ($rows[0] as $row){ 

if ((strpos($row,'<th')===false)){ 

    preg_match_all("|<td(.*)</td>|U",$row,$cells); 

    $number = strip_tags($cells[0][1]); 

    $name = strip_tags($cells[0][5]); 

    $artist = strip_tags($cells[0][6]); 

    $name = strtolower($name); 
    $name = ucwords($name); 

    echo "{$artist} - {$name} - Number {$number} <br>\n"; 

} 

} 

回答

3

嘗試使用,而不是複雜的正則表達式http://simplehtmldom.sourceforge.net/

require_once 'simple_html_dom.php'; 

$html = file_get_html('http://www.ariacharts.com.au/pages/charts_display_singles.asp?chart=1U50'); 
$table = $html->find('table.chartTable'); 

foreach ($table[0]->find('tr') as $row) { 
    $columns = $row->find('td'); 
    if (sizeof($columns) < 7) continue; 

    $number = $columns[1]->plaintext; 
    $name = ucwords($columns[6]->plaintext); 
    $artist = $columns[7]->plaintext; 

    echo "$artist - $name - Number $number <br />\n"; 
} 
+1

對不起,但我只是在尋找如何刪除一行,而不是重寫整個腳本。不管怎麼說,還是要謝謝你。 – Sam 2011-06-01 10:33:32

+0

@Sam,你需要學習提供好的建議。查看我的更新後的帖子,使用PHP Simple HTML DOM Parser更容易。它實現了你想要的約50%的代碼。 PS:你不應該使用正則表達式來解析HTML。 – Petah 2011-06-02 00:07:10

+0

@Petah,使用cURL與簡單的HTML DOM解析器而不是file_get_contents()... http://webarto.com/82/php-simple-html-dom-curl @Sam,你應該刪除你的腳本,並重新開始,你無法用RegEx解析這個複雜的HTML(你不應該)。 – 2011-06-02 00:10:46

1

對於要快速和骯髒的方法PHP簡單的HTML DOM解析器,你聲明「開始」變量之前把這個代碼:

$content = str_replace('<td><img src="/images/bullet_red.gif" width="8" height="8" title="Red Dot" /></td>', '', $content);