Помогите сделать парсинг страницы с погодой со страницы провайдера http://mydc.ru/r/?http://internet.factorial.ru/channel/?section=main. Мои наброски, но думаю неправильно
Код
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 == " " then tData[10][i] = "" end end for i, sData in pairs(tData[11]) do if sData == " " 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 == " " then tData[12][i] = "" else tData[12][i] = sData:g("<img.*title = \"", ""):g("\">", "") end end return tData end