Что нового

Синтаксический анализ HTML.

mr.Gbabak

Осваивающий
Сообщения
257
Репутация
24
Здравствуйте, ни как не могу побороть задачу по извлечению строк из HTML,
моя задача состоит в извлечении названия и исполнителя песен из плейлиста радиостанции с сайта http://www.moreradio.ru/playlist_radio.php?id=3&nashe.
Вроде пользовался справкой, темами http://autoit-script.ru/index.php/topic,4901.0.html, http://autoit-script.ru/index.php/topic,9941.0.html, там вроде все понятно, но на практике оказался :Lamer: :(
Пробовал составить шаблон на основе StringRegExp, в итоге получилось куча не рабочих вариантов, поэтому не стал их приводить сюда.
По причине очень большого обрабатываемого HTML кода, тоже не привожу, но если нужно будет, то приведу.
P.S. очень признателен буду любой помощи.
 

sngr

AutoIT Гуру
Сообщения
1,015
Репутация
411
Код:
#include 'array.au3'
$inet=BinaryToString(InetRead('http://www.moreradio.ru/playlist_radio.php?id=3&nashe',1))
$str=StringRegExp($inet,'</span> <a href=online_video.php.*?title=".*?" class="a9">(.*?)</a>',3)
_ArrayDisplay($str)
 
Автор
M

mr.Gbabak

Осваивающий
Сообщения
257
Репутация
24
Хм, а как будет правильно через такую конструкцию:

Код:
#include <IE.au3>
#include <Array.au3>
$sUrl = 'http://www.moreradio.ru/playlist_radio.php?id=3&nashe'
$oIE = _IECreate($sUrl)
$sHTML = _IEBodyReadHTML($oIE)

$sResult = StringRegExp($sHTML, '(?si)</span> <a href=online_video.php.*?title=".*?" class="a9">(.*?)</a>', 3)
_ArrayDisplay ($sResult)
 

sngr

AutoIT Гуру
Сообщения
1,015
Репутация
411
При извлечении информации из html важно не только правильно составить регулярное выражение, но и определить кодировку текста. Что толку в правильном рег выражинии если в искомом тексте не отображается половина символов? Когда получаешь страницу через InetRead или ещё как либо иначе и хочешь натравить на неё рег выражиние, сначала запиши страницу в файл и посмотри блокнотом что получилось.
 
Автор
M

mr.Gbabak

Осваивающий
Сообщения
257
Репутация
24
sngr [?]
сначала запиши страницу в файл и посмотри блокнотом что получилось.
Вот они, самые полезные слова, моим способом тоже получилось, после того как глянул!)) :dance1:Спасибо большое!!!
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
mr.Gbabak [?]
На практике (без RegExp) это выглядит так :smile:
Код:
#include <IE.au3>
#include <Array.au3>
Dim $sResult
$sUrl = 'http://www.moreradio.ru/playlist_radio.php?id=3&nashe'
$oIE = _IECreate($sUrl)
$oLinks = _IELinkGetCollection($oIE) ; берём коллекцию всех ссылок
For $i = 0 To @extended - 1 ; @extended - содержит общее количество найденных ссылок
    If $oLinks($i).className == 'a9' And Mod($i, 2) = 0 Then ; находим все ссылки className == 'a9' при условии, что каждая чётная Mod($i, 2) = 0 нам не интересна (в ней картинка)
        $sResult &= $oLinks($i).innerText & '|' ; собираем все ссылки в строку с разделителем между ними '|'
    EndIf
Next
$sResult = StringTrimRight($sResult, 1) ; удаляем крайней с права разделитель '|' (он лишний)
$aResult = StringSplit($sResult, '|') ; формируем массив ссылок
_ArrayDisplay ($aResult)
 
Автор
M

mr.Gbabak

Осваивающий
Сообщения
257
Репутация
24
Garrett [?]
На практике (без RegExp) это выглядит так
smiley.gif
OffTopic:
Да, как так-то? Ни чего не понял, но тоже работает....

А можно прокомментировать?!!
 
Верх