Дневник by Nelex

Будет ли хотя бы неделя когда не будет чего-нибудь нового?

В целом не сказать что последих пару недель были плохими. Они были напряженными как и всегда, удалось практически закончить один сайт недвижимости с парсингом. Увы случилось так что парсить пришлось источник на 15.5к записей и все их нужно было прогнать через гуглопереводчик.

В принципе можно сказать что стоимость всех облачных(в нашем случае сервисов имеющих API) переводчиков не так уж много, да и цены у них +- одинаковые. Так вот сразу задумываешься, как на долго хватит лимита в 500 000 бесплатных символов? В принципе, как оказалось, это вообще ни о чем. Гугл при начале использовании сервиса дает 300у.е. бонусных или же 365 дней бесплатного пользования, что закончиться раньше. Сложностей в использовании самого переводчика вообще 0, для этого гугл уже подготовил удобные библиотеки. Так вот, с учетом бонусных 300у.е. + 500 000 бесплатных символов в месяц хватило этого на около 4 000 записей. В итоге пришлось выкручиваться тремя учетками так как суммы получались не маленькими. Размер записи от 500+ символов, точнее не скажу.

Вторым неприятным моментом который я не учел сразу было то что парсер я создавал достаточно простой по этому распараллеливание не учитывал. Из-за этого когда начал увеличивать скорость парсинга количеством единовременно парсящихся обьектов получился банальный race condition к базе и соответственно дубли итоговых записей. Сразу я этого не заметил, но позже добавил блок на записи по времени до 15 минут и этого вполне хватило чтобы быстро спарсить все оставшееся в весьма быстром темпе. Делал я и побыстрее парсеры, но тут цена того не стоила, так как нужно спарсить один раз. 

Как всегда сам парсер представлял из себя три стадии:

  1. Парсинг индексных страниц
  2. Парсинг страниц обьектов + перевод
  3. Конвертация в обьект в системе

При этом обмануть гугла с помощью прокси и прочей хрени не стоит даже думать, тот зараза умный и такой трюк с ним маловероятно что пройдет, вот и у меня не прошел. Пакет на 1000 проксей вылетел в момент. Благо я фиксирую когда парсер получает ошибки и инкрементирую ошибки, а следующую прокси беру рандомно с сортировкой по минимальному количеству ошибок. Но даже такое рассеивание ни к чему не приводит с гуглом, он палит реальный IP, реальный DNS и т.п. 

Естественно продвинутые гики скажут что можно сесть за туннелем и спрятать запросы к днс и прочие утечки и будут правы. Тут как всегда вопрос цены, так как был вариант проще.

И вот собственно два косяка которые выплыли из-за race condition(состояния гонки за ресурсы, а конкретнее к базе данных):

  1. Дубли доп. данных в виде картинок с планом расположения
  2. Дубли фото

И если первая проблема спокойно решилась банальным поиском совпадений картинок по совпадениям названий по каждому из обьектов, то вторая тем что пришлось запустить скрипт который брал md5 файлов по обьектам и сравнивал есть ли уже такой. То есть если говорить проще идем по обьектам, внутренний цикл по фото. Смотрим есть ли такой хеш для этого обьекта. Если есть то текущую запись удаляем и саму картинку тоже. При каждой итерации загоняем в массив запись вида обьект-хеш_картинки. И вот по ней и видим есть ли такой хеш для такой записи. Все просто и быстро, и к тому же точно.

И ведь это была только одна из задач данной недели. А их было гораздо больше. Но это был новый опыт так как до этого подобным заниматься не приходилось, даже не смотря на то что написание каждого из алгоритмов заняло минут 15-20, не более, а его выполнение учитывать не приходиться. Главное не боятся и думать головой.

Это так же может быть интересным вам

Vue.js
Vue.js

Активно изучаю Vue.js, параллельно всем остальным рабочим процессам. Так что, думаю, в ближайшее время проект ...

Добавил: Nelex

Npm vs Yarn
Npm vs Yarn

В целом я более положительно отношусь сейчас к NPM, так как мне на текущем этапе и его хватало с головой...

Да вот ...

Добавил: Nelex

Еще пару дней жесткого порно...
Еще пару дней жесткого порно...

Так то вроде прям ничего сверх-сложного, но сроки, сроки, сроки...

В целом расковырял fullcalendar достаточно сильно ...

Добавил: Nelex

Очередной рабочий день закончен. Выводы, успехи и неудачи
Очередной рабочий день закончен. Выводы, успехи и неудачи

Еще один день закончился. Он был достаточно сложным, нужно было сделать многое. Что-то успел, что-то нет.

По ...

Добавил: Nelex

Отключайте дебаг на продакшне )))
Отключайте дебаг на продакшне )))

Стало быть, понадобилось мне спарсить данные одного сайта для конференций. Не буду указывать сам сайт, так ...

Добавил: Nelex

Случайные публичные видео

8 ГЛАВНЫХ ошибок из-за которых НИЧЕГО НЕ получается в жизни – С чего начать свой путь к успеху
8 ГЛАВНЫХ ошибок из-за которых НИЧЕГО НЕ получается в жизни – С чего начать свой путь к успеху

саморазвитие психология ошибки

http://release-me.ru/optimize1/wordpress/mozg2/ - Подпишись на Нейробику http://release-me.ru/optimize1/wordpress/dengi2/ - Получи 17 секретов Долларовых...

Добавил: Nelex 0 280

Жак Фреско - Не ругайте себя, вы не совершаете ошибок
Жак Фреско - Не ругайте себя, вы не совершаете ошибок

ошибки фреско ожидания

Жак Фреско - Не ругайте себя, вы не совершаете ошибок. Ожидания в отношениях. Люди растут поэтапно. Каждый...

Добавил: Nelex 0 389

7 Навыков Высокоэффективных Людей. Стивен Кови. Саморазвитие
7 Навыков Высокоэффективных Людей. Стивен Кови. Саморазвитие

саморазвитие эффективность навыки

Семь навыков высокоэффективных людей – это одна из самых популярных книг для развития личности, которая...

Добавил: Nelex 0 273

6 Советов, Меняющих Жизнь - Уоррен Баффет
6 Советов, Меняющих Жизнь - Уоррен Баффет

мотивация баффет советы

Подписывайтесь на канал Эвана Кармайкла https://goo.gl/QYzYpk и не забывайте нажать на значок уведомлений, чтобы...

Добавил: Nelex 0 440

9 принципов по которым Вам нужно жить, чтобы добиться всего о чем мечтаете
9 принципов по которым Вам нужно жить, чтобы добиться всего о чем мечтаете

мотивация принципы мечты

Существует ли рецепт успеха? Как добиться своей цели? Сегодня я подготовил видео в котором успешные люди,...

Добавил: Nelex 0 270