Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

MyDC.ru _ Kорзина _ Помогите Сделать Парсинг

Автор: THE STRELOK 13.4.2009, 7:11

Помогите сделать парсинг страницы с погодой со страницы провайдера http://mydc.ru/r/?http://internet.factorial.ru/channel/?section=main. Мои наброски, но думаю неправильно beat_brick.gif

Код
MakeNeedData = function(sData)    -- парсинг (обработка) данных
    local _,_, sArchiveData = sData:find("<td>(.-)</td>")    -- ищем архивные данные
    sArchiveData = sArchiveData:g(" <a.*</a>", ""):g("  ", " ")    -- убираем ссылку и двойной пробел
    local _,_, sMainTitle = sData:find("<b>(.-)</b>")    -- ищем заголовок страницы
    local _,_, sWeatherData = sData:find("<table>(.-)</table>") -- ищем табличку с данными о погоде
    local tRowWeatherData, tRowData2, tRowsInfo, tMadeData, tMadeData2 = {}, {}, {}, {}, {}    -- объявляем локальные таблицы
    for sRow in sWeatherData:gmatch("\t<tr.->(.-)</tr>") do    -- заносим данные из каждого ряда таблицы полученных данных в таблицу tRowWeatherData
        table.insert(tRowWeatherData, sRow)
    end
    for i, sMadeRowData in pairs(tRowWeatherData) do    -- проходим по таблице с рядами
        tRowData2[i], tRowsInfo[i] = {}, {}    -- заносим индекс в таблицу
        for sTd, sRow2 in sMadeRowData:gmatch("(<td.->)(.-)</td.->") do -- обрабатывам каждую колонку в каждом ряду по мере прохождения по ним
            local _,_, iColSpan = sTd:find("colspan=(%d)") -- совмещены ли колонки?!
            if not iColSpan then -- если нет
                table.insert(tRowsInfo[i], 1)    -- то заносим в таблицу с инфой о колонках 1
            else    -- если да
                table.insert(tRowsInfo[i], tonumber(iColSpan))    -- то заносим в таблицу с инфой о колонках кол-во совмещенных колонок
            end
            table.insert(tRowData2[i], sRow2)    -- заносим необработанную инфу в таблицу
        end
    end


Код
ReMakeData = function(tData)    -- обработка сырой таблицы данных
    local tData = DeleteNotNeedInfo(tData)    -- удаляем не нужные нам строки
    -- дальше ёпнешься объяснять, в каждой строке - своя система подачи данных при помощи тегом html, в них ищется нужная инфа и уже потом заносится в таблицу готовой информации
    for i, sData in pairs(tData[1]) do
        tData[1][i] = sData:g("<br>", ", "):g("<span.->", ""):g("</span>", "")
    end
    for i, sData in pairs(tData[3]) do
        tData[3][i] = sData:g("<img.*title=\"", ""):g("\">", "")
    end
    table.remove(tData[4], 1)
    for i, sData in pairs(tData[4]) do
        tData[4][i] = sData:g("<img.*title=\"", ""):g("\">", "")
    end
    for i, sData in pairs(tData[8]) do
        local _,_, sTitle = sData:find("title=\"(.+)\"")
        if sTitle then
            tData[8][i] = sTitle
        end
    end
    tData[10][1] = tData[10][1]:g("<.*>", "")
    for i, sData in pairs(tData[10]) do
        if sData == "&nbsp;" then
            tData[10][i] = ""
        end
    end
    for i, sData in pairs(tData[11]) do
        if sData == "&nbsp;" then
            tData[11][i] = ""
        else
            local _,_, sTitle = sData:find("title='(.+)'")
            if sTitle then
                tData[11][i] = sTitle
            end
        end
    end
    for i, sData in pairs(tData[12]) do
        if sData == "&nbsp;" then
            tData[12][i] = ""
        else
            tData[12][i] = sData:g("<img.*title = \"", ""):g("\">", "")
        end
    end
    return tData
end

Структура страницы:
Код
      <div align="center">
          <p>Погода на ближайшие дни</p>
<table><tr><td colspan=2><b>13 апр, Пн&nbsp;(Утро)</b></td></tr>
<tr><td>-1...-3&nbsp;&deg;C<br>742..744 мм<br>Северный, 3 м/с</td><td><img src="/images/weather/tucha.png" border="0" width="40" height="40" alt="" onload="fixPNG(this)"></td></tr><tr><td colspan=2>&nbsp;</td></tr>
<tr><td colspan=2><b>13 апр, Пн&nbsp;(День)</b></td></tr>
<tr><td>-1...+1&nbsp;&deg;C<br>742..744 мм<br>Северный, 4 м/с</td><td><img src="/images/weather/tucha.png" border="0" width="40" height="40" alt="" onload="fixPNG(this)"></td></tr><tr><td colspan=2>&nbsp;</td></tr>

<tr><td colspan=2><b>13 апр, Пн&nbsp;(Вечер)</b></td></tr>
<tr><td>+1...+3&nbsp;&deg;C<br>742..744 мм<br>Северный, 3 м/с</td><td><img src="/images/weather/tucha.png" border="0" width="40" height="40" alt="" onload="fixPNG(this)"></td></tr><tr><td colspan=2>&nbsp;</td></tr>
<tr><td colspan=2><b>14 апр, Вт&nbsp;(Ночь)</b></td></tr>
<tr><td>-1...-3&nbsp;&deg;C<br>742..744 мм<br>Северный, 2 м/с</td><td><img src="/images/weather/tucha.png" border="0" width="40" height="40" alt="" onload="fixPNG(this)"></td></tr><tr><td colspan=2>&nbsp;</td></tr>
<tr><td colspan=2><b>14 апр, Вт&nbsp;(Утро)</b></td></tr>

<tr><td>-1...-3&nbsp;&deg;C<br>741..743 мм<br>Северо-Западный, 2 м/с</td><td><img src="/images/weather/tucha.png" border="0" width="40" height="40" alt="" onload="fixPNG(this)"></td></tr><tr><td colspan=2>&nbsp;</td></tr>
<tr><td colspan=2><b>14 апр, Вт&nbsp;(День)</b></td></tr>
<tr><td>-1...+1&nbsp;&deg;C<br>741..743 мм<br>Северный, 2 м/с</td><td><img src="/images/weather/snow.png" border="0" width="40" height="40" alt="" onload="fixPNG(this)"></td></tr><tr><td colspan=2>&nbsp;</td></tr>
<tr><td colspan=2><b>14 апр, Вт&nbsp;(Вечер)</b></td></tr>
<tr><td>+1...+3&nbsp;&deg;C<br>740..742 мм<br>Северный, 1 м/с</td><td><img src="/images/weather/tucha.png" border="0" width="40" height="40" alt="" onload="fixPNG(this)"></td></tr><tr><td colspan=2>&nbsp;</td></tr>

<tr><td colspan=2><b>15 апр, Ср&nbsp;(Ночь)</b></td></tr>
<tr><td>-1...-3&nbsp;&deg;C<br>741..743 мм<br>Южный, 1 м/с</td><td><img src="/images/weather/obl_sun.png" border="0" width="40" height="40" alt="" onload="fixPNG(this)"></td></tr><tr><td colspan=2>&nbsp;</td></tr>
<tr><td colspan=2><b>15 апр, Ср&nbsp;(Утро)</b></td></tr>
<tr><td>-1...-3&nbsp;&deg;C<br>740..742 мм<br>Юго-Западный, 1 м/с</td><td><img src="/images/weather/obl_sun.png" border="0" width="40" height="40" alt="" onload="fixPNG(this)"></td></tr><tr><td colspan=2>&nbsp;</td></tr>
</table>      </div>


 Weather.rar ( 5.66 килобайт ) : 2
 

Автор: THE STRELOK 13.4.2009, 20:07

Тему удалить можно...