Обожаю напиваться и представлять, что я крутой программист. Сегодня перед нами стоит задача написать многопоточный парсер. За источник данных будет взят vk и его api, для получения данных.Но сначала надо ухуяриться. ПОЕХАЛИ!
Сразу предупрежу, что я никогда книг не читал и вообще к программированию имею совершенно посредственное отношение. Просто нравится созидать.
Пишу свою залупу на языке GO. Просто давно хотелось в нем разобраться.
Поехали
>>135656954На пике жалкая попытка создания парсера, которую я предпринял пару часов назад. Сейчас мы его будем переделывать. Первое что нужно сделать - спроектировать приложение. Я хз что это такое, но попробуем.
Пойду подопьюсь немного, чтобы разогнаться.
Я подумал и решил, что проектирование - подробное описание программы, да так, что оно бы работало в разных ситуациях.
>>135656546 (OP)> парсер> apiЧто блять?! И в main всю логику пишут только мудаки.
>>135657338Ну ты же понял о чем речь идет. Я собираю информацию о вк к себе на жесткий диск. А как надо логику организовать? Научи.
>>135657437Модельки вынеси, сервисы там. В main чисто инициализацию оставь.
>>135657679>МоделькиМодельки в Го?>СервивыТоже немного не понялИ что должна представлять из себя инициализация такой программы? Там же из всей инициализации - запуск воркеров, да вызов функции скачивания данных
Оп, я так и не понял, что ты парсить собрался?Апи вк выдаёт JSON, ты хочешь парсер жсона написать?
>>135657942Граббер, наверное, будет правильно сказать. Просто собираю информацию для анализа.
>>135658016А, тогда ладно.Пихай её тогда сразу в какую-нибудь MySQL, чтобы можно было нормально с большими объёмами потом работать.
>>135658181Так и будет. Но что на счет вот этого? >>135657908
>>135657908> Модельки в Го?Данные которые будешь собирать - учётка, запись со стены и т.д. + методы для работы с базой.Сервисы, мэнеджеры кто как зовёт - грубо говоря объеднинение методов работы с определённой моделькой.
>>135656546 (OP)Парсер чего?
>>135658222>И что должна представлять из себя инициализация такой программы? Там же из всей инициализации - запуск воркеров, да вызов функции скачивания данныхСкорее всего почти так, как ты описал:1. Подгрузка некого конфига, где будет кей от вк-апи и некие настройки воркеров2. Создание воркеров3. Управление воркерами, т.е. сначала отправляешь им события уровня "start" с нужными параметрами (тот же апи-кей из конфига) и читаешь от них сообщения и вообще следишь за ними, чтобы можно было перезапустить в случае краша и т.д.В воркере уже дёргаешь в цилке апи, и или сохраняешь или прямо из воркера, или отсылаешь это мастеру (поток, из которого были запущены воркеры) и он уже сам определяет, что с этим делать.
Если ты преодолеваешь какой-то лимит запросов за момент времени, то вк высылает тебе капчу. Через 10-15 мин можно слать запросы без капчи. Оттакая хуйня.
>>135658502Последнюю строку как-то сумбурно написал.В воркере дёргаешь апи и получаешь результат. Дальше уже можешь или сохранить прямо через воркер, или отослать мастеру.
>>135658489vk и его api
>>135658502>1. Подгрузка некого конфига, где будет кей от вк-апи и некие настройки воркеровТочно. Про настройки в файле вообще забыл. Но скорее всего будут вынесены в параметры вызова программы.>>135658559Нет уже такого. Читай документацию. Есть flood_control, но он только на вызов с токеном
>>135658559Если через апи, то там ограничение - не более 3 запросов в секунду почти на все методы (кроме, например, users.search - там вообще ограничения анальные).
>>135658617Эм… ладно
>>135658662нет
>>135658559>Нет уже такого. Читай документацию.Я получал капчу когда слишком часто дёргал функции лички, но не на долго, буквально на 10 секунд.
>>135658693Пидора ответ. Что нет, когда да?
>>135658747Ограничение только на вызов метода с токеном. Без токена не попадает под это ограничение.
>>135658735Скорее всего от типа приложения зависит. У меня ни разу не было
>>135658827А без токена это как, лол?
Почистил код. Оставил все, что качается запуска воркеров и получения данных.
>>135658903Вот так https://api.vk.com/method/groups.getById.json?group_ids=1,2
>>135658946А если мне нужно, например, работать с личкой? Там нужен токен.
>>135658909Обосрался с этого высера.
Pidor
>>135658909Теперь, как я понимаю у меня 2 варианта:1. Передавать список айдишников групп при создании воркера2. Передавать список через chan>>135659133Да
>>135658909Переименуй, пожалуйста, complite в complete, а то очень больно смотреть.И не забудь обработку ошибок, которые кидает вк апи.
>>135659167Ты подскажи лучше.
>>135659215>completeПереименовал. Сейчас добавлю обработку. И управление воркерами.
>>135659181Чому не вызывать каждый раз новую горутину и зачем их 3?.
>>135659418Так горутина и вызывается. Или ты про то, что я ограничиваю количество горутин?
>>135659418Вот этот товарищ натолкнул меня на мысль о доработке приложения. Теперь это не просто граббер. Я попытаюсь открыть сразу столько соединений, сколько смогу и добиться просто максимальной скорости. Сейчас посчитаю, сколько нужно горутин вызвать.
>>135659673Че грабишь то хоть?
>>135659555Да. Не активных можно сотнями плодить, а вот нагруженных лучше не делать. Горутины любят делать небольшие вещи, но в больших количествах.
>>135656546 (OP)анон, ты сделал мой деньбуду теперь нажираться и представлять себя то таксистом, то гинекологом, то железным человеком!
>>135659722Все сообщества ВК и информацию общую о них.>>135659733Так и сделаем
>>135659810Для статистики чтоль?
А теперь зацените что я нашелhttps://vk.com/club10000000
>>135659858Да просто интересно это сделать.
https://vk.com/club10000000
>>135659972Интересно было бы фид почитать.
В общем, я насчитал 90 000 000 сообществ. Сколько из них активны - хз.Каждое обращение к апи возвращает 500 сообществ. Получается, 90000000/500=180000 воркеров.Хз, но посмотреть что получится интересно. Сейчас посчитаем сколько это в памяти может занять.
>>135658909покупаю чужой софт, скажи с чего начать вкатывание в самописный,(чекеры парсеры) даже лень вглядываться что это за язык. питон?
>>135660328>питонДа на любом пиши. Хоть на жс.
>>135660328Вот этот прав >>135660355 чтобы вкатиться достаточно уметь читать и не быть дураком.
>>135660355а с чего начинал изучать? с гугла просто? всякие курсы там
>>135660420С раздела /pr. Там все написано в факе.
>>135660505ок
Прочти Effective Go. Ну и пройди туториал заодно.
Для хранения данных была выбрана mongoDB. Сейчас установлю ее и посмотрю что там да как. Позже еще реализую mysql.
>>135662547Чому не SQLite?
>>135662644Не знаю. А что лучше?
>>135662802Oracle
>>135662818Чем?
>>135662802Постгрэс. Монга не нужна для твоих целей
>>135662897Энтерпрайз.
>>135657107Хуя се жалкая попытка. Это где-то на уровне крутых хакеров
>>135662983Поясни тогда в чем моя ошибка и чем именно лучше постргрэс. Хочу исправиться, но я должен знать в чем дело.
>>135663068У тебя структура не изменяется, а вот поиск тебе делать надо будет. Монга нужна когда ты не знаешь точный набор полей у сущности. Реляционки нужны когда набор полей строго определён и тебе нужны выборки по ним.
>>135663239Круто, спасибо. Ну, начнем значт с постгрэс
Тем временем дописана основная часть по сбору информации. Осталось прикрутить базу
Я просто кончаю от того, какой go охуенный
>>135667716Для байтоебства не подходит.
>>135667792Совершенно другое предназначение.
>>135656546 (OP)в первый момент представил как ты строку будешь в несколько потоков парсить, потом отпустило.
>>135667895Язык должен быть универсален.Тем более с таким хорошим синтаксисом.
>>135668038одна задача - один язык.
>>135668077один - эс
>>135656546 (OP)Хуле там писать, смерд? Полторы строки и цикл, охуеть
>>135656546 (OP)они pipelining поддерживают?
Test
Раз уж тут крутые погромисты собрались, мож посоветует кто технологию и язык для создания многопоточного эмулятора браузера?Только не надо тут коко в стиле "Ну это вебвью, вебвью, тред, тред и в продакшн". Только то, что сами пробовали.Это только в маняфантазиях хипстопетушков программные продукты и технологии работают как надо.А на деле гроб-кладбище-пидр.Поехали:1. PhantomJS. Невозможно отследить окончание отправки формы или клика на ссылку.2. Selenium. Не поддерживает многопоток. Нет нормальных GUI-less драйверов. Все драйвера кроме четырех дефолтных постоянно падают.Что еще?Короче мне нужен программный аналог zennoposter.
>>135668535запускаю на машине 250 фантомов, хожу по интернету, завиисмости никакой. правда у меня простая жс-ка выполняется, формы не отправляет.
>>135668703Сколько памяти жрут 250 фантомов, кстати? Дохуя наверн. По моим подсчетам гигов 15
>>135668806по несколько мегабайт PID PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 20055 20 0 2161m 148m 37m R 19 0.2 0:05.41 /usr/bin/phantomjs --disk-cache=false --load-images=false --local-storage-quota=0 --ignore-ssl-errors=tr566 20 0 2154m 146m 38m R 18 0.2 0:44.69 /usr/bin/phantomjs --disk-cache=false --load-images=false --local-storage-quota=0 --ignore-ssl-errors=tr456 20 0 2474m 129m 36m R 18 0.2 0:46.59 /usr/bin/phantomjs --disk-cache=false --load-images=false --local-storage-quota=0 --ignore-ssl-errors=tr17681 20 0 1980m 108m 36m R 18 0.2 0:26.02 /usr/bin/phantomjs --disk-cache=false --load-images=false --local-storage-quota=0 --ignore-ssl-errors=tr313 20 0 2085m 142m 34m R 18 0.2 0:44.20 /usr/bin/phantomjs --disk-cache=false --load-images=false --local-storage-quota=0 --ignore-ssl-errors=tr474 20 0 2231m 146m 36m R 18 0.2 0:45.74 /usr/bin/phantomjs --disk-cache=false --load-images=false --local-storage-quota=0 --ignore-ssl-errors=tr1774 20 0 2010m 124m 33m R 18 0.2 0:44.44 /usr/bin/phantomjs --disk-cache=false --load-images=false --local-storage-quota=0 --ignore-ssl-errors=tr8934 20 0 1915m 73m 35m R 18 0.1 0:00.93 /usr/bin/phantomjs --disk-cache=false --load-images=false --local-storage-quota=0 --ignore-ssl-errors=tr23426 20 0 2567m 369m 39m R 18 0.6 0:27.11 /usr/bin/phantomjs --disk-cache=false --load-images=false --local-storage-quota=0 --ignore-ssl-errors=tr300 20 0 2085m 143m 36m R 18 0.2 0:44.90 /usr/bin/phantomjs --disk-cache=false --load-images=false --local-storage-quota=0 --ignore-ssl-errors=tr478 20 0 2229m 145m 36m R 18 0.2 0:45.68 /usr/bin/phantomjs --disk-cache=false --load-images=false --local-storage-quota=0 --ignore-ssl-errors=tr554 20 0 2085m 143m 36m R 18 0.2 0:45.80 /usr/bin/phantomjs --disk-cache=false --load-images=false --local-storage-quota=0 --ignore-ssl-errors=tr
Раз уж тут все погроммисты - помогите мне реализовать поиск по спирали (изнутри наружу) в quadtree. Я тут набросал, что примерно хочу. Нахуя мне это нужно? Ну, мне нужно получать n-точек которые находятся рядом с некой координатой x, y в дереве.
>>135669947а какой вид у тебя имеют запросы, xmin<x<xmax & ymin<y<ymax ?
>>135670030Эмм, не совсем понимаю. В общем есть дерево в котором будут хранится координаты, которые берутся с гуглокарты (latitude, longitude):private QuadTree<String> quadtree = new QuadTree<>(-90.0, -180.0, 90.0, 180.0);Мне нужно получать n-точек (не больше), находящихся вокруг координаты (данная координата это середина экрана на котором открыта гуглокарта). Сейчас у меня реализована функция поиска точек чьи координаты входят в прямоугольник, но это не подходит (на картинке показано как эта функция выполняет обход дерева при поиске).
>>135669181Как так? У меня меньше 50 метров не бывает. А так 70-100.Ты там шаманишь как-то, чтобы так мало жрало?
>>135670247нет, дефолтный второй собрал, картинки отключил и все.
>>135670238то есть у тебя есть база точек, по которой ты сделаешь индекс, и есть запрос-прямоугольник, который надо пересечь с этим множеством точек?
ОП, ПРИМЕНИ СИНГЛТОН
>>135670238сколько точек в индексе, какой рпс, какая требуется точность, какой порядок n, какая гранулярность координат точек и карт, какой будет набор масштабов карт
>>135670339Да. Но запрос-прямоугольник не подходит (пикрелейтед). Нужно по спирали изнутри собирать точки до тех пор пока не наберётся нужное количество. Мне их потом раздавать пользователям и они будут видеть их у себя на карте.
>>135670463зачем собирать по спирали, тебе надо пересечь базу с картой и отсортировать по расстоянию от центра
>>135670238А в чем проблема обход по спирали?Берешь идешь вправо, вниз, влево, вверх. И так постоянно. И перед каждым ходом делай проверку, эту точку проходили уже или нет. Если да, то повторяешь последнее действие.
>>135670304Что за страницы грузишь тогда? Там сложный html? Кинь адрес страницы, если можешь или похожую по сложности.
>>135670463и на всякий случай спрошу, про геохеш слышал?
>>135670516морды доменов рунета.
>>135670450>сколько точек в индексеНу, тестирую на миллионе.>какой рпсРеквестс пер секонд? Пока не знаю.>какой порядок n, Ну, n <= 100, т.е. не более 100 точек за реквест.>какая требуется точность>какая гранулярность координат точек и карт, какой будет набор масштабов картНа это я затрудняюсь ответить.>>135670492Ну, потому что получается как на пике >>135670463 (И это ещё не самый плохой вариант) А мне нужно чтобы они из центра экрана шли.>>135670493Да, о чём-то примерно таком я и думал, просто решил заодно посоветоваться раз тут тред о кодинге.>>135670524Ноуп, не слыхал.
>>135670677>нужно чтобы они из центра экрана шли.што.если у тебя все точки слева, из центра экрана они идти все равно не будут. ты что там пишешь вообще?>Ноуп, не слыхал.почитай, лишним не будет.
>>135670534>морды доменовГлавные страницы что ли? Там достаточно сложный htmlИ потребление памяти всегда 2 метра?Да как так.... Ничего не понятно
>>135670768не 2 а 30+, но 15Гб все равно не получается, хотя мне в общем-то все равноtop - 01:22:29 up 510 days, 4:28, 2 users, load average: 168.54, 148.18, 78.43Tasks: 662 total, 170 running, 473 sleeping, 0 stopped, 19 zombieCpu(s): 90.9%us, 8.8%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.4%si, 0.0%stMem: 65944408k total, 53882212k used, 12062196k free, 1224304k buffers
>>135670762Они не слева, они везде на экране. Просто я ищу не более 100 штук. Вот то что на экране это первые найденные 100 точек из всего миллиона. Хотя походу у меня тут ещё и кеш сломался. В общем спасибо за геохеш. Походу это то что мне и нужно, обязательно читну.
>>135670923я же говорю, ты пересекай с картой, потом сортируй по расстоянию до центра, а потом уже limit 100
>>135670923а по геохешу можно тупой одномерный индекс сделать, вместо rtree/kdtree, хоть прямо на базе, главное гранулярность адекватную подобрать, чтобы типовая карта содержала не слишком много квадратов.
>>135670954Ну, я думаю сделать так, чтоб все точки и все операции над ними проходили в памяти. В бд раз в час будет скидываться дамп, чтобы его можно было загрузить при краше.
>>135671019а у тебя еще на запись будут действия?
>>135671031Да, вставка точек в дерево, удаление старых ну и чтение.
>>135671062пиши transaction log всех апдейтов по ходу дела. восстановление из снапшота и дочитываешь этот кусок.
>>135671081Да, хорошая мысль.
>>135671062с блокировками ты поймаешь веселья. в r/o синкать не надо ничего, а ты решил прямо всё сразу. а может тебе точки влить куда-то в апи гугла и поиск делать на их же апи? или у них бесплатный вариант ограничен?
>>135671081Потом она сама себя не
>>135670923бамп
>>135671081по кингу было до диснея. муншэдоу, который ни разу не героика и того подавно
>>135667792Чому?