bebebe
Phantomjs headless это во-первых. Во вторых selenium умеет тот же хром
bebebe
В третьих это универсально
Roman
Я без этих штуковин прекрасно все парсил, не нужно. Если вместо тяжелого дом парсера юзать регекспы - то плюсик к опыту регекспов и скорость вырастет в разы, и память соответственно
Snusmumriken
Ну вот такие, например. Это код треда, вызывающего произвольную фигню. Менеджер где-то рядом болтается.
bebebe
парсинг понятее растижимое, как вы например javascript эвенты хендлили? подозреваю никак
Snusmumriken
Ах да, тут истинная многопоточность, и треды не блокируют )))
Менагер тупо проходит циклом по списку занятых тредов и если от них что-то пришло - выдаёт это например в табличку.
Snusmumriken
bebebe
да я уже понял уровень вашей аргументации
Roman
никто не говорил что за задача :)
bebebe
вы не описали условия задачи
bebebe
короче, я из этой беседы сольюсь, простите
Snusmumriken
короче, я из этой беседы сольюсь, простите
Для хендлинга и прочей фигни есть тот же headless chrome, который гарантированно хорошо работает, потому что это хром, который выдаёт дамп полностью сформированной странички % )
Roman
Snusmumrik, а можно тогда ещё скрин самого парсера? Где циклом в функцию кладутся урлы и колбеки
bebebe
крута чо
Snusmumriken
bebebe
какой то луа головного мозга
Snusmumriken
какой то луа головного мозга
Ты одновременно прав и не прав, это забавно.
Ну, пофигу же чем, на самом деле.
Нода не умеет работать браузером, и не создаёт DOM для того чтобы нормально хендлить весь JS, который может ajax'ами дополнять страничку. Так зачем морочиться, когда здоровенная часть фигни уже есть на луях (лично у меня, например)?
bebebe
да вы тут не первый
bebebe
такой
bebebe
с этим диагнозом
Roman
потому что там несколько строчек и вот тебе все плюшки, в луа непонятно как оно работать вообще будет
bebebe
кто-то вон выше хотел MTA писать
Snusmumriken
Roman
с нодой есть один файл и все
Roman
он и запускается, и все, просто же
Snusmumriken
с нодой есть один файл и все
А DOM?
Допустим, на сайте - капча. Капча подгружается из обфусцированного сгенерированного js, которая модифицирует DOM. Что сделает нода в этом случае?
А будет ли js обрабатывать на нескольких процессорах?
bebebe
bebebe
жду пока она подгрузится
получаю координаты элемента на странице
делаю скриншот, вырезаю со скриншота по координатам капчу
Snusmumriken
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
вас как отпусит, так и приходите
Snusmumriken
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
Snusmumriken
Что за неламповая херня в чатике?
Да тут товарищ, в чате про луа, наполненном маниакальными помешанными на луа чуваками, говорит что луа годится только для openwrt/встраиваемость ))
bebebe
это все очень хорошо, если бы я не работал в конторе которая терминировала 80k/s
зачем вы мне это все рассказываете в целом?
Snusmumriken
bebebe
80 тысяч запросов в секунду http
bebebe
да хрен с ним, парсите страницы на луа бггг
bebebe
что я в самом деле :)
bebebe
я ж говорю, тут уже собирались MTA писать на луа :)
Snusmumriken
80 тысяч запросов в секунду http
А, это без проблем. Я писал луа-сервис который обрабатывает 3млн UDP-запросов в секунду на core i5, на сервере - больше, а TCP раза в три медленнее.
bebebe
3млн UDP? это что dns что ле ? :)
bebebe
короче, ладно, я еще раз сольюсь
bebebe
lua 3млн запросов в секунду бггг udp
bebebe
syslog?
Snusmumriken
Все, абсолютно все логи всего предприятия принимаются одним скриптиком и пишутся в базу.