Господа, подскажите пожалуйста как реализовать такую задачу на Луа. 1. Робот заходит на страничку с дивидендами: http://smart-lab.ru/dividends/ 2. Читает её 3. Формирует Луа-таблицу с полями Тикер - дата отсечки Т+2 Тикер - дата отсечки Т+2 4. В последний день перед дивидендым гэпом посылает сообщение в КВИК.
Мои роботы на Луа никогда не читали интернет-странички и не брали из них данных. Даже не знаю с чего начать. Спасибо за помощь.
Let_it_go написал: Господа, подскажите пожалуйста как реализовать такую задачу на Луа. 1. Робот заходит на страничку с дивидендами: http://smart-lab.ru/dividends/
2. Читает её 3. Формирует Луа-таблицу с полями Тикер - дата отсечки Т+2 Тикер - дата отсечки Т+2 4. В последний день перед дивидендым гэпом посылает сообщение в КВИК.
Мои роботы на Луа никогда не читали интернет-странички и не брали из них данных. Даже не знаю с чего начать. Спасибо за помощь.
В луа (github) есть библиотеки для работы с http. Подключайте их и читайте страницы. Дело муторное.
Можно на языке высокого уровня написать читалку страниц и подсовывать результаты в скрипт. Это и попроще и понадежнее. Вот пример, как это может работать
Let_it_go написал: Господа, подскажите пожалуйста как реализовать такую задачу на Луа. 1. Робот заходит на страничку с дивидендами: http://smart-lab.ru/dividends/
2. Читает её 3. Формирует Луа-таблицу с полями Тикер - дата отсечки Т+2 Тикер - дата отсечки Т+2 4. В последний день перед дивидендым гэпом посылает сообщение в КВИК.
Мои роботы на Луа никогда не читали интернет-странички и не брали из них данных. Даже не знаю с чего начать. Спасибо за помощь.
C:\Program Files\Lua\5.1\lua\socket.lua:13: module 'socket.core' not found: no field package.preload['socket.core'] no file '.\socket\core.lua' no file 'C:\Open_Broker_QUIK\lua\socket\core.lua' no file 'C:\Open_Broker_QUIK\lua\socket\core\init.lua' no file 'C:\Open_Broker_QUIK\socket\core.lua' no file 'C:\Open_Broker_QUIK\socket\core\init.lua' no file 'C:\Open_Broker_QUIK\Include\socket\core.lua' no file 'C:\Open_Broker_QUIK\Include\socket\core.luac' no file 'C:\Open_Broker_QUIK\LuaIndicators\socket\core.lua' no file 'C:\Open_Broker_QUIK\LuaIndicators\socket\core.luac' no file 'C:\Program Files\Lua\5.1\lua\socket\core.luac' no file 'C:\Program Files (x86)\Lua\5.1\lua\socket\core.lua' no file 'C:\Program Files\Lua\5.1\lua\socket\core.lua' no file '.\socket\core.dll' no file 'C:\Open_Broker_QUIK\socket\core.dll' no file 'C:\Open_Broker_QUIK\loadall.dll' no file 'C:\Open
Let_it_go, Ваша задача немного сложнее, чем пример который я написал. Дело в том,страница, которую вы хотите читать не содержит готовой таблицы. Поэтому кроме парсера Вам придется исполнять джава скрипты. ------------------- Поэтому более правильно решать вашу задачу через использование браузера в качестве ком объекта.
Николай Камынин написал: Let_it_go , Ваша задача немного сложнее, чем пример который я написал. Дело в том,страница, которую вы хотите читать не содержит готовой таблицы. Поэтому кроме парсера Вам придется исполнять джава скрипты. ------------------- Поэтому более правильно решать вашу задачу через использование браузера в качестве ком объекта.
Эта страница - статический html. Пример выше именно ее и достает и парсит. По крайней мере, так было месяц назад, когда пример писался.
Николай Камынин написал: Let_it_go , Ваша задача немного сложнее, чем пример который я написал. Дело в том,страница, которую вы хотите читать не содержит готовой таблицы. Поэтому кроме парсера Вам придется исполнять джава скрипты. ------------------- Поэтому более правильно решать вашу задачу через использование браузера в качестве ком объекта.
Эта страница - статический html. Пример выше именно ее и достает и парсит. По крайней мере, так было месяц назад, когда пример писался.
Пример очевидно хороший для тех, кто знает CPP и и работу c make. Полагаю, что 99% посетителей этого форума и не знают как с этим работать. Эти особенности и есть недостатки примера. -------------------------------------- Кроме того, пример содержит еще две особенности. 1) Скорректированная библиотека, т е недокументированная поделка. 2) Как сказано в примере: "Преобразование данных из HTML будет осуществляться для простоты "ручным" поиском строк и регулярными выражениями. В более серьезной архитектуре может применен XML-парсер и др., такой вариант оставляется читателю ручной способ поиска." ----------------------------- Следовательно, это скорее всего - готовое частное решение, а не пример для подражания. --------------------------------------- Полагаю, что более универсальное решение , может быть на luacom и InternetExplorer.Application. Т е решении исключительно в рамках стандартов Майкрософт и языка луа. -------------------------------
http = require 'socket.http' local address = 'http://smart-lab.ru/dividends/index/order_by_t2_date/desc/' htmls = http.request(address) ------------------------ а потом вытащить данные используя ручной способ из приведенного примера El El переписав его на луа.
Кроме того, пример содержит еще две особенности. 1) Скорректированная библиотека, т е недокументированная поделка.
2) Как сказано в примере: "Преобразование данных из HTML будет осуществляться для простоты "ручным" поиском строк и регулярными выражениями. В более серьезной архитектуре может применен XML-парсер и др., такой вариант оставляется читателю ручной способ поиска." ----------------------------- Следовательно, это скорее всего - готовое частное решение, а не пример для подражания. --------------------------------------- Полагаю, что более универсальное решение , может быть на luacom и InternetExplorer.Application. Т е решении исключительно в рамках стандартов Майкрософт и языка луа. -------------------------------
Цитата
1) Скорректированная библиотека, т е недокументированная поделка.
Это по какой логике? Скорректированные библиотеки - недокументированные поделки? Причем тут документация (кроме того, это документировано на curl и там, откуда вы это списали)?
Цитата
2) Как сказано в примере: "Преобразование данных из HTML будет осуществляться для простоты "ручным" поиском строк и регулярными выражениями. В более серьезной архитектуре может применен XML-парсер и др., такой вариант оставляется читателю ручной способ поиска." ----------------------------- Следовательно, это скорее всего - готовое частное решение, а не пример для подражания.
А это по какой логике? Готовое частное решение по чтению частной страницы smartlab.
Let_it_go, Выкладываю вариант решения на луа указанной страницы сайта.
Код
require "socket"
http = require 'socket.http'
local address = 'http://smart-lab.ru/dividends/index/order_by_t2_date/desc/'
local ts={"tr","strong","span"}
local lMax=91 --число строк в таблице
--------------------
function nkdelspace(s)
local len=string.len(s); local z=""; local x1=32;
for i=1,len do local x=string.byte(s,i); if x<32 then x=32 end
if (x~=32 or x1~=32) then
if z=="" then z=string.char(x) else z=z..string.char(x) end
x1=x; end
end --убираем проблелы
return z;
end
----------------------
local body = http.request(address)
----------------------
for i=1,#ts do
body = string.gsub (body,"(<%s*"..ts[i].."[^>]*>)","")
body = string.gsub (body,"(<%s*/"..ts[i].."[^>]*>)","")
end
body = string.gsub (body," "," ")
local t={} -- результат
local j=0; local k=0; local text=0;
local m=1;
local n=string.find(body,"td>",m,#body,true);
local x=string.byte(body,n-1);
m=m+3;
-----------------
while #body>m do
n=string.find(body, "td>",m,#body,true);
if n then local n1=n;
if x~=47 then
x=string.byte(body,n-1); if x==47 then n=n-1; end
text = string.sub(body, m,n-2); text = nkdelspace(text);
local len=string.len(text);
if len<20 then
j=j+1; if j==1 then k=k+1; t[k]={} end
local tt=t[k]; tt[#tt+1]=text;
if j==8 then if k==lMax then break end
j=0 end
end
else
x=string.byte(body,n-1);
end
m=n1+3;
else break;
end
end
Результат - таблица t . 91 элемент ( это переменная lMax). каждый элемент - таблица из 8 элементов: -------------------- 1>table ....1 PHOR ....2 08.08.2017 ....3 10.08.2017 ....4 2016 ....5 н/расп ....6 21 ....7 2345 ....8 0,9% -------------------- ..2>table ....1 GAZP ....2 18.07.2017 ....3 20.07.2017 ....4 2016 ....5 год ....6 8,0397 ....7 122,28 ....8 6,6% ----------------- и т д
Николай Камынин написал: Let_it_go , Выкладываю вариант решения на луа указанной страницы сайта.
Добрый день. Хотел использовать ваш код, но при запуске выпадает ошибка module 'socket.core' not found:
Я новичок в этой области. Прочитал, что нужна библиотека luasocket-2.0.2, скачал, разместил в папке libs. Нашел совет в сети, что нужно скопировать путь для этой папки в код. Прописал такой путь:
./libs/lua/socket.lua:13: module 'socket.core' not found:
no field package.preload['socket.core']
no file 'C:\Quik_Alor\lua\socket\core.lua'
no file 'C:\Quik_Alor\lua\socket\core\init.lua'
no file 'C:\Quik_Alor\socket\core.lua'
no file 'C:\Quik_Alor\socket\core\init.lua'
no file 'C:\Quik_Alor\. .\share\lua\5.3\socket\core.lua'
no file 'C:\Quik_Alor\. .\share\lua\5.3\socket\core\init.lua'
no file '.\socket\core.lua'
no file '.\socket\core\init.lua'
no file './libs/lua/socket\core.lua'
no file 'C:\Quik_Alor\socket\core.dll'
no file 'C:\Quik_Alor\. .\lib\lua\5.3\socket\core.dll'
no file 'C:\Quik_Alor\loadall.dll'
no file '.\socket\core.dll'
no file './libs/socket/socket\core.dll'
no file './libs/mime/socket\core.dll'
no file 'C:\Quik_Alor\socket.dll'
no file 'C:\Quik_Alor\. .\lib\lua\5.3\socket.dll'
no file 'C:\Quik_Alor\loadall.dll'
no file '.\socket.dll'
no file './lib
У меня Квик версии 8.8.4.3 и насколько я понял, стоит lua 5.3. Я прочитал в сети, что библиотека luasocket-2.0.2 подходит только в версии 5.1. Я нашел 3 версию библиотеки тут: https://github.com/diegonehab/luasocket Но не смог разобраться, как с ней дальше поступить. Скопировал в папку - ошибки продолжаются. Больше в сети информации никакой нет. Помогите советом, очень охота ваш код увидеть в своем терминале. Спасибо