bebebe
Phantomjs headless это во-первых. Во вторых selenium умеет тот же хром
bebebe
В третьих это универсально
Roman
Я без этих штуковин прекрасно все парсил, не нужно. Если вместо тяжелого дом парсера юзать регекспы - то плюсик к опыту регекспов и скорость вырастет в разы, и память соответственно
Snusmumriken
Ну вот такие, например. Это код треда, вызывающего произвольную фигню. Менеджер где-то рядом болтается.
bebebe
парсинг понятее растижимое, как вы например javascript эвенты хендлили? подозреваю никак
Snusmumriken
Ах да, тут истинная многопоточность, и треды не блокируют ))) Менагер тупо проходит циклом по списку занятых тредов и если от них что-то пришло - выдаёт это например в табличку.
bebebe
да я уже понял уровень вашей аргументации
Snusmumriken
да я уже понял уровень вашей аргументации
Ладно, задам вопрос иначе. Кто сказал что это нужно в данной конкретной задаче?
Roman
никто не говорил что за задача :)
bebebe
вы не описали условия задачи
Snusmumriken
никто не говорил что за задача :)
"Парсинг сайтов" Где написано про "хендлинг js"?
bebebe
короче, я из этой беседы сольюсь, простите
Snusmumriken
короче, я из этой беседы сольюсь, простите
Для хендлинга и прочей фигни есть тот же headless chrome, который гарантированно хорошо работает, потому что это хром, который выдаёт дамп полностью сформированной странички % )
Roman
Snusmumrik, а можно тогда ещё скрин самого парсера? Где циклом в функцию кладутся урлы и колбеки
bebebe
крута чо
Snusmumriken
Snusmumrik, а можно тогда ещё скрин самого парсера? Где циклом в функцию кладутся урлы и колбеки
Конкретно эта фигня - для чутка другой задачи, я не грузил её урлами : )
bebebe
какой то луа головного мозга
Snusmumriken
какой то луа головного мозга
Ты одновременно прав и не прав, это забавно. Ну, пофигу же чем, на самом деле. Нода не умеет работать браузером, и не создаёт DOM для того чтобы нормально хендлить весь JS, который может ajax'ами дополнять страничку. Так зачем морочиться, когда здоровенная часть фигни уже есть на луях (лично у меня, например)?
bebebe
да вы тут не первый
bebebe
такой
Snusmumriken
Snusmumrik, а можно тогда ещё скрин самого парсера? Где циклом в функцию кладутся урлы и колбеки
Ок, boot.lua запускает main.lua, который запускает script.lua. Эта фиговина связывается с нодой по hemera nats. https://drive.google.com/drive/folders/0B5jgIFA1a21rYzROOE9ONFAzS28?usp=sharing
bebebe
с этим диагнозом
Roman
потому что там несколько строчек и вот тебе все плюшки, в луа непонятно как оно работать вообще будет
bebebe
кто-то вон выше хотел MTA писать
Roman
с нодой есть один файл и все
Roman
он и запускается, и все, просто же
Snusmumriken
с нодой есть один файл и все
А DOM? Допустим, на сайте - капча. Капча подгружается из обфусцированного сгенерированного js, которая модифицирует DOM. Что сделает нода в этом случае? А будет ли js обрабатывать на нескольких процессорах?
bebebe
жду пока она подгрузится получаю координаты элемента на странице делаю скриншот, вырезаю со скриншота по координатам капчу
Snusmumriken
жду пока она подгрузится получаю координаты элемента на странице делаю скриншот, вырезаю со скриншота по координатам капчу
А если она не грузится? Если поле url капчи пустое, и заполняется после получения какого-то такого скрипта?
Snusmumriken
mva
Selenium, phantimjs
последний мёртв. Первый, возможно, тоже.
Snusmumriken
жду пока она подгрузится получаю координаты элемента на странице делаю скриншот, вырезаю со скриншота по координатам капчу
Причём автоматически: эта обфусцированная лабуда сама знает в какую часть документа пихнуть только что сгенерированную ей же ссылку на капчу.
bebebe
А если она не грузится? Если поле url капчи пустое, и заполняется после получения какого-то такого скрипта?
еще раз, дожидаюсь пока она полностью загрузится с помощью js def wait_for_image_isload(driver, element): start_time = time.time() while time.time() < start_time + 5: if driver.execute_script("elem = document.getElementById('{}'); return (typeof elem.naturalWidth!=\"undefined\" && elem.naturalWidth>0)".format(element.get_attribute('id'))) == True: return True else: time.sleep(0.1) raise Exception( 'Timeout waiting for {}'.format(condition_function.__name__) )жду что она появилась в доме
bebebe
осечек это не давало
bebebe
около 2к проходов, как бы она медленно не грузилась
Snusmumriken
Во-о-о-от. Только твой способ медленный как незнамо что. У тебя есть временнЫе лимиты? У меня - минута на полный парсинг, включая разгадывание капчи.
bebebe
у меня 18 секунд лимит
bebebe
ты вообще о чем
bebebe
если за 18 секунд не успел - смена капчи
Snusmumriken
ты вообще о чем
Ты же драйвер используешь. Драйвер постоянно висит? Он не закрывается? А если тебе нужно обработать сотню страничек одним приложением за минуту? Хм. Я просто тут как раз подрубаю многопоточность и постоянно висящий сервисом headless chrome, который формирует уже полностью конечную страничку и выдаёт её текстом.
bebebe
а в чем проблема? у меня есть пулл машин, там запущены webdriver которые я использую
bebebe
webdriver позволяет сменить драйвер на phantomjs, он headless
bebebe
короче, что я тебе поясняю бггг
bebebe
прицел сбился
Snusmumriken
Хех, ладно : ) У меня нет пула машин, зато есть один маленький скрипт который за минуту должен обработать кучу всего. Phantom боюсь что глючный.
bebebe
вас как отпусит, так и приходите
bebebe
я боюсь, что вам нужно выйти из мира lua, и использовать его только как встраевамый язык, либо на openwrt
mva
а на openwrt он не встраиваемый?
bebebe
бггг куда?
mva
в веб-сервер
mva
uhttpd
bebebe
да, я его использую для парсинга xml например, т.к. других языков на мой openwrt не поставишь, слишком маленький
bebebe
объем памяти
mva
ну и uci (не путать с luci) тоже не целиком на lua
bebebe
lua - это единственный ЯП который мне подошел для парсинга xml на openwrt. (не считая говноскриптов на баше)
bebebe
железка tpl842nd если что, там реально мало памяти
mva
NodeMCU
Что за неламповая херня в чатике?
mva
вот где мало памяти
mva
:)
bebebe
NodeMCU
прекольная вещь
Snusmumriken
я боюсь, что вам нужно выйти из мира lua, и использовать его только как встраевамый язык, либо на openwrt
Я боюсь, что мне нужно делать то что мне нравится, например, писать крупные серверные приложения на луа, потому что оно быстрее в разработке и/или исполнении чем ноды/жавы/с++ : ) А то что удобно писать на петоне - я пишу на петоне. А то что можно написать только на сишке, я пишу на сишке и пробрасываю биндинг в луа.
Snusmumriken
Что за неламповая херня в чатике?
Да тут товарищ, в чате про луа, наполненном маниакальными помешанными на луа чуваками, говорит что луа годится только для openwrt/встраиваемость ))
bebebe
это все очень хорошо, если бы я не работал в конторе которая терминировала 80k/s зачем вы мне это все рассказываете в целом?
bebebe
80 тысяч запросов в секунду http
bebebe
да хрен с ним, парсите страницы на луа бггг
bebebe
что я в самом деле :)
bebebe
я ж говорю, тут уже собирались MTA писать на луа :)
Snusmumriken
80 тысяч запросов в секунду http
А, это без проблем. Я писал луа-сервис который обрабатывает 3млн UDP-запросов в секунду на core i5, на сервере - больше, а TCP раза в три медленнее.
bebebe
3млн UDP? это что dns что ле ? :)
bebebe
короче, ладно, я еще раз сольюсь
bebebe
lua 3млн запросов в секунду бггг udp
Snusmumriken
3млн UDP? это что dns что ле ? :)
Логи. Куча машин шлёт бешеное количество логирующих сообщений.
bebebe
syslog?
Snusmumriken
Все, абсолютно все логи всего предприятия принимаются одним скриптиком и пишутся в базу.