Дневник 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, не более, а его выполнение учитывать не приходиться. Главное не боятся и думать головой.

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

Количество задач неуклонно растет
Количество задач неуклонно растет

Чем чревато то когда ты можешь делать что-то неплохо, руки не из жопы и ты начинаешь делать свой проект в этой ...

Добавил: Nelex

Код, код, код.... знания, знания, знания...
Код, код, код.... знания, знания, знания...

За последних пару недель, все в том же потоке информации.

По нескольким сайтам проанализировал по Hotjar ...

Добавил: Nelex

Зачем я это делаю?
Зачем я это делаю?

Так как я человек ленивый и мотивации мне часто не хватает, то перед тем как взяться за крайне не охотную ...

Добавил: Nelex

Переделал главную страницу, добавил функционал - Успехи
Переделал главную страницу, добавил функционал - Успехи

Таки занялся я переработкой главной страницы. Взял за основу шаблон лендинга, переделал и заполнил данными. ...

Добавил: Nelex