Как получить элементы со страницы с помощью Simple HTML DOM Parser - PullRequest
0 голосов
/ 02 июня 2010

Я пытаюсь проанализировать HTML-страницу с помощью Simple HTML DOM Parser. Эта HTML-страница не использует идентификаторы, что затрудняет обращение к элементам.

На этой странице я пытаюсь получить название альбома, название песни, ссылку для скачивания и изображение альбома. Я сделал это, но даже не могу получить названия альбомов!

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

    $article = $html->find('table td[class=title]', 0);

    foreach($article as $link){

       echo $link;

    }

Это выводит: 1tdArrayArrayArray Artist Array

Мне нужно получить такой вывод:

Image Path
Duniya Jamiila [URL]
Macaan Badnoo  [URL]
Donimaayee     [URL]
...

Спасибо всем за помощь

Обратите внимание: это законно, так как песни не связаны авторским правом, и они доступны для бесплатной загрузки, просто мне нужно скачать их много, и я не могу сидеть и нажимать на кнопку целый день. Сказав это, мне потребовался час, чтобы продвинуться так далеко.

Ответы [ 2 ]

1 голос
/ 02 июня 2010

Это то, что вы имеете в виду?

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

   echo $url->children(2);
   echo $url->children(6)->children(0)->href;
   echo '<br>';
}

Редактировать

Использование Простой HTML DOM .

Исходя из вашего комментария, вот обновленный код с некоторыми (надеюсь) полезными комментариями.

$urls = $html->find('table[width=100%] table tr');
foreach($urls as $url){
    // Check that we actually have the right number of children, this was what was breaking before
    if ($url->children(6)) {
        /* Without the following check, we get a digg icon and a useless link. You can merge this with the if statement above, I only have it
         * seperated so that I can write this comment and it will make more sense when reading it for the first time.
         */
        if ($url->children(2)->children(0)->src == 'images/digg.png' || $url->children(2)->children(0)->href == 'javascript:void(0)') continue;
        // echo out the name of the artist. You can get the text without the link by using $url->children(2)->plaintext
        echo $url->children(2);
        // echo out the link. Obviously you could put this href inside a <a href="code-here">whatever-here</a> tag to make the links clickable.
        echo $url->children(6)->children(0)->href;
        echo '<br>'; // just for readability
   }
}
0 голосов
/ 02 июня 2010

На странице, которую вы использовали в своем примере, есть только три тега TD, которые имеют атрибут class со значением title.

1. <td height="35" class="title" style="padding-left:7px;"> Artist</td> 
2. <td colspan="3" height="35" class="title" style="padding-left:7px;"><img src="images/b24/dot_next.png" />Desco</td> 
3. <td colspan="3" height="35" class="title" style="padding-left:7px;"><img src="images/b24/dot_next.png" />The Best Of Aasha</td>

Первый всегда содержит текст «Исполнитель», а остальные - названия альбомов. Они также являются единственными тегами TD с class = "title" AND colspan = "3", поэтому их будет очень легко выбрать с помощью HTML DOM Parser.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...