2010-06-02 49 views
0

上我只是幫助了這個問題,但我不能讓它移動到HTML的下一塊。解析HTML:調用一個成員函數>兒()非對象

$html = file_get_html('http://music.banadir24.com/singer/aasha_abdoo/247.html'); 

$urls = $html->find('table[width=100%] table tr'); 

foreach($urls as $url){ 

    $song_name = $url->children(2)->plaintext; 

    $url = $url->children(6)->children(0)->href; 

} 

它返回的第一張專輯(Deesco)的名稱列表中,但它並沒有繼續下一張專輯(盡Aasha)?它只是給了我這個錯誤:

Notice: Trying to get property of non-object in C:\wamp\www\test3.php on line 26

Fatal error: Call to a member function children() on a non-object in C:\wamp\www\test3.php on line 28

這是爲什麼,如何才能讓它繼續到下一個表元素?

我明白任何幫助!

請注意:這是合法的,因爲歌曲不被約束的版權,他們都可以自由下載,它只是我需要下載他們中的很多,我不能坐在那裏點擊一個按鈕一整天。說了這麼多,我花了一個小時才弄到這麼遠。

+0

我敢打賭,你發現EXP一些空行相匹配了。在$ song_name行 – barrycarter 2010-06-02 17:42:01

+0

之前嘗試「echo $ url」我試過了,但我沒有得到與底部相同的錯誤。但我確實注意到'$ url'迴應的最後一行是下一個專輯名稱,並且它不會超過這個。 – user356556 2010-06-02 17:45:13

回答

2

也許你最好是寫這樣的:

foreach($urls as $url){ 

    if ($node = $url->children(6)) { 
     $node->children(0)->href; 
    } 

} 
+0

中發現的那樣啊,那就是訣竅!謝謝。 :) – user356556 2010-06-02 18:01:24

+0

我剛剛添加了錯誤控制!順便說一句,你還應該檢查* $ node-> children(0)*是否返回了一些東西。 – mexique1 2010-06-02 18:11:14

0

的錯誤意味着你的->children(6)查詢沒有返回一個有效的對象 - 大概是因爲有該行中沒有第六個孩子。

要找出爲什麼不嘗試調試返回的HTML結構 - 例如使用print_r($url)

+0

@現在這樣做,它的年齡到'print_r($ url)'。現在完成,有大量元素返回,滾動條很小,瀏覽器崩潰!爲什麼會有這麼多,是不是我選擇縮小的東西?是否有另一個選擇器可用於縮小範圍幷包含第二部分? – user356556 2010-06-02 17:54:27

+0

* print_r()*當然是巨大的,因爲節點引用其父代,父代自己的父代,等等...... – mexique1 2010-06-02 18:08:03

0

我想你會想優化您的選擇只包括專輯名稱的TR的。目前我相信你會抓住所有的tr,這可能會有意想不到的結果。也許像$html->find('table[width=100%] table tr td .title');

+0

這個選擇器似乎沒有返回任何東西? – user356556 2010-06-02 17:47:04

+0

對不起,沒有測試出來。但基本的想法是創建一個選擇器,它只抓取包含一個標題類的td的表的行,就像在專輯名稱tr – 2010-06-02 18:15:53

相關問題