Вы видите копию треда, сохраненную вчера в 15:17.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
еС ЧО компания из 40 человек, продающие шины, в общем не бигтех
-----------------------------
Благодарим Вас за отклик на вакансию "Junior Python Developer". Ваше резюме показалось нам очень интересным. Мы хотели бы пригласить Вас на интервью, после того как вы выполните тестовое задание!
Готовы!?
Техническое задание:
- Написать два любых парсера для сбора информации о ценах и остатках из любых интернет-магазинов;
- Каждый парсер должен собирать не менее 250 товаров в любой категории;
- Сохранять данные о названии и цене в файлы xls и csv на выбор;
- Названия товаров в файлах должны быть отсортированы по алфавиту (в прямом или обратном порядке в зависимости от аргументов командной строки);
- После завершения парсинга найти и вывести медианное значение для цен товаров в категории;
- Программа должна запускаться с параметрами командной строки.
Параметры командной строки:
- Выбор одного из двух парсеров для запуска;
- Выбор формата для сохранения файла;
- Выбор порядка сортировки имён товаров в итоговом файле;
- Выбор названия файла для сохранения.
Перед выполнением задания нужно отписаться мне о готовности выполнять и обозначить сроки!
После завершения нужно записать видео экрана с короткими комментариями по коду и результату работы.
По готовности видео, нужно заполнить анкету(ссылка на формы) и отправить видео и ссылку на код мне в телеграмм(8-XXX-XXX-XX-XX).
Если есть, что добавить в качестве конкурентного преимущества, пишите дополнительно мне так же в телеграмм - буду ждать!
Если вдруг задание покажется сложным, дайте мне обратную связь
Ну думаю нормальная тренировка. Показывает твой уровень. Могут посадить куда нить в банк работать, как моего знакомого.
Там не банк, а буквально 40 человек с шинами, даже отзывов нет наххру
Ну если время есть, нет портфолио и срочно нужна работа любой ценой - можешь сделать и залить себе на гитхаб. Все равно задание делается меньше чем за день.
Есть мнение, что это наебалово, твои парсеры будут использоваться по прямому назначению, а сам ты пойдёшь наледенец. Ну типа откликнулась тысяча лохов, из них 700 написали парсеры озона и вулдбериса, остальные чё-то там ещё выбрали, и вот у тебя есть куча норм решений для поиска и сравнения цен на шины. Автоматизация, ёпта.
Ну сам подумай, нахуя в компании по продаже шин нужен питонист-джун?
ТЕБЯ ПРОСТО ИСПОЛЬЗУЮТ
Ну лул, может ты мидл-сенька. Я хоть и имею опыт, но уже с пятницы копаюсь после работы вечером.
1) код нужно сделать модульно чтобы был расширяем, а так же на любой пук нужен класс, чтобы можно было вскрыть его и спиздить его под что угодно
2) надо написать максимально чисто
3) сделать тесты
в 1 функцию запилить как задачу это 1 вечер, но мы про принятие на работу и все таки культуру писать не печенье с молокомкод, а черный ящик написать надо
1 - parser py, верхний слой, а остальное идет корни
Ну, тип, нормальное задание.
Можно накидать костылей за пару часов, можно написать охуенный код в 20 строчек за пару дней.
>охуенный код в 20 строчек за пару дней.
>>50912
>
>1) код нужно сделать модульно чтобы был расширяем, а так же на любой пук нужен класс, чтобы можно было вскрыть его и спиздить его под что угодно
>
>2) надо написать максимально чисто
>
>3) сделать тесты
>
>в 1 функцию запилить как задачу это 1 вечер, но мы про принятие на работу и все таки культуру писать не печенье с молокомкод, а черный ящик написать надо
>
>1 - parser py, верхний слой, а остальное идет корни
Два чаю, сам пишу парсеры на фрилансе, там буквально в задании работа стоит минимум 100К за парсер. И главное найдут лохов которые это сделают.
Я джун, на работе похожие задания. Делается такое очень быстро (пишу на шарпах). Такие же требования. Особо сложного нет в задании ничего, а эти требования это буквально стандарт для написания приложений, которые в принципе тебе даже не должны были расписывать, а в идеале ты сам должен был так писать с самого начала. Если тебе такое дается с трудом - повышай квалификацию как раз написанием таких тестовых заданий и надейся на фидбэк.
Если ты все же даун, но хочешь работу, то можешь решить при помощи чатгпт.
Само наличие тестового задания это норм, такую леденецню никто не будет у тебя воровать чтобы использовать в своих коммерческих целях, это задачка для мидла на день максимум (часа на 2-3 примерно).
На первую работу я решал алгоритмических 6 задачек на время до собеседования и без фидбека в случае неудачи.
> которые в принципе тебе даже не должны были расписывать
а мне и не расписывали, я понимаю их
>>51563
>если не можешь такое решить, то ты даун и с тобой смысла общаться на собеседовании нет
послушный мальчик срыгни пожалуйста
>>51563
>задачка для мидла
мидл от джуна имеет разрыв глубокий, ты бы еще сеньку приплел
>>51563
>На первую работу я решал алгоритмических 6 задачек на время до собеседования и без фидбека в случае неудачи.
значит, у тебя просто лучше навыки были на тот момент. Но задачку я бы также в 1 функцию написал, как и эту программу, но надо под святые стандарты все распланировать. Коммерческая разработка отличается от того, чтобы написать вакуумный скрипт
>>51563
>никто не будет у тебя воровать чтобы использовать в своих коммерческих
там его на 2 сайта надо было расшарить. Думаешь, что магазин шин не хотят спиздить готовый проект, чтобы своих конкуретной просто прописать?
Ага ещё может бесплатно отполучать в подарок???
По сути ты им даёшь туторил, а кабанчик мы перезвоним. Вы че дибилы делать тестовые задании за бесплатно??? Пусть башляет деньги. Или показывай конечный результат. В натуре холопы. Когда мне говорят про тестовые надо сделать а их несколько. Уточняю . Если на знания языка без вопросов. А если таск идите ищите мамонта.
Я вам могу написать и рассказать банальные алгоритмы. Это не проблема . Хорошо поняли мы вам перезвоним. Лел.
Лол нет. Он выдает проект в 1 файле решение, а это чисто модуль, куда подключаются остальные. Могу показать еще, что я написал перед тем как дропнуть
> будет 1000 откликов
> хз как отбирать
точно так же как если откликов всего 50, но есть возможность повторить процесс еще 20 раз. но анальникам-вахтерам и хрюшам с fomo этого не понять
> даун даун даун даун
походу даун ты
> На первую работу я решал алгоритмических 6 задачек на время до собеседования и без фидбека в случае неудачи
а я нет, просто на вопросики поотвечал. и на вторую. и на третью. Если ты любишь жрать печенье с молоком, то пожалуйста. Но почему-то печенье с молокомеды в it не могут это делать молча и трясет, когда кто-то не такой терпила как они
> Бс4
Это было бы легко, я даже код сделал, который и перебирает это DOMики, но сайты магазинов это во 1 подозрительно, потому что компания сама коммерческая и кажется что наебут
2 на сайтах там день через день чеккеры чтобы не парсили, например, через скрипт ты к сайту ленты не подключишься, выдаст ошибку "запрещен доступ без входа", хотя с мобилы и пквсе заебись, там пиздец защиты и нужно иметь компетенции соответствующе, да и вообще я на бекендера иду, поэтому у меня нет вот опыта чужие сайты на абордаж брать
Ебанутое тупорылое безграмотное быдло. Это ты. А алгоритмы применяются везде - скажем, тебе нужно знать, как устроено и работает B-дерево, если планируешь хоть сколько-нибудь оптимизированные запросы писать. Да даже поиск большой подстроки в большом спаршенном файле. Умняша напишет через Ахо-Корасика или хотя бы через роллинг хэш, а ты за O(NM) в лучшем случае.
Знаешь мне это не интересно. Ты можешь что-то угодно написать под разным углом, а какая эффективность и быстро действие? Можешь и как модуль сделать. Меня интересует теоретическая база
Фига. Ну дарова.
>и быстро действие? Можешь и как модуль сделать. Меня интересует теоретическая база
а причем тут чат гапота? это мой печенье с молокомкодец. Да и в питоне нет места быстродействию
Самые быстрые алгоритмы на С++.
Защиту от cloud flare ты всё равно не обойдёшь. Очень нетривиальная задача. Рецепты обхода в 99% случаев уже не работают. Постоянно идёт капча хитроваебанная, где надо ползунки двигать и пазлы собирать или дрочить вприсядку.
Нормальное тестовое. Пожалуй даже простое. А позиция как называется? Просто я такое с помощью селениума делал, а это инструмент для тестирования.
Слшиком дофига возни для тестового, имхо. Я такие пропускал когда вкатывался. По объёму тестового можно сказать, что твоё время не ценят, и, скорее всего, ценить не будут даже при найме.
880x916, 1:52
видосом если не против https://pastebin.com/N9A4FLLu
алсо я прям бегом рассказал, но это вторая запись, первая запись звук с микро не записала, поэтому там немое кино было
>>52585
>Парсить сайты + позиция джуна, всего скорей просто показать что ты пишешь адекватный поддерживаемый расширяемый код. Используешь патиерны и принципы solid. Обходить защиты сайтов это точно не твоего джуновского ума дело.
а ну это я умею, просто забросил код поэтому выглядит немного хуевенько и недописано соответственно
ну вот оно и есть, я споткнулся об клаудфаер и потом начал сомневаться впринципе что-то тут не атк
да и не то что главное резултат, питон, имея библы даже на чистом С под капотом медленный. Поэтому это бессмысленно
> Если нет - пошли они наледенец.
С нынешней конкуренцией это ты пошел наледенец. Либо выполняй тестовую либо получи в подарок леденец без работы
Какой качественный, задокументированные метод. Ни разу не лапша. Каждая функция имеет понятное название. Триста тысяч этому господину
кабанчик, ты? увидел твои не работает и сразу узнал. Передай трубочку синьке. я ему скажу пару ласковых.
мимо мидлятина
Мы вам перезвоним.
У тебя по ТЗ требование - запустить свою леденецню и показать её работу, а в коде куча пустых методов и визг, что ты уже всё сделал.
Спасибо аноныч. Как учился, документацию читал, где черпал информацию, кем работаешь, помимо этого какие языки знаешь. А вообще чем занимаешься?
С виду просто. С гопотой можно сделать часа за 2 если печенье с молокомкодом и за день, если со всеми ООП и солид. Куда тут паттерны крутить даже не знаю, но если вьебешь то молодец. Другое дело, что для сбора данных с магазинов вроде озона и вообще любого нужен хитрый метод обхода и магаз очень может не дать тебе даже первый ответ кодом 200)))). На мой взгляд хитрые как и все эти галеры ссаные. Сам проходил и бесят сильно. Не взяли ни по одному тестовому такого толка. Отклик не дадут
>че думаете о тестовом на джуна?
Выглядит будто решили сэкономить на поиске фрилансера и это тестовое потом будут юзать для своих целей, а тебя наледенец пошлют.
Блять, ты ничтожество ёбаное здесь проще некуда и при этом я Художник 3D графики, которому Питон нужен только для работы внутри Blender 3D. Эта работа явно не для тебя.
>Написать два любых парсера для сбора информации о ценах и остатках из любых интернет-магазинов
Парсить сайты можно через библу Beatifulsoup, в первых строчках прописываешь pip install для каждой нужнлй библы. Так же тебе потребуются минимальные знания HTML (любую сраную книжку на 150-200 страниц прочти и держи под рукой всегда)
>Каждый парсер должен собирать не менее 250 товаров в любой категории;
Отобрать распарсенные типы товаров через random из списка в оперативе в лимите 250. (ну тут while, if - все очень просто)
>Программа должна запускаться с параметрами командной строки.
Скомпилируй питон через Nuitka Лмао, нет. Пусть наледенец идут.
Пример как надо:
import sys
if len(sys.argv) > 1: # Проверка на аргумент
⠀⠀⠀⠀argument = sys.argv[1] # Получение первого аргумента
⠀⠀⠀⠀print(f"Ты передал аргумент, уебок: {argument}")
else:
⠀⠀⠀⠀print("Аргумент ты передал, хуеполучи в подарокна")
> Куда тут паттерны крутить даже не знаю, но если вьебешь то молодец.
В чём молодец? Наледенец городить их там, где они не нужны?
пожалуйста)
в школе писал буквально как лего, не вдаваясь в подробности, даже не знал что такое функция и как ее сделать, ну глупым был
потом ближе к 16 летию засел, писал свои проектики и просто веселился грубо говоря, делая рофельные штуки от смс-бомберов до email спаммеров, а потом поступил в айти-шарагу (к слову, если соберетесь поступать, то только ВУЗ и уважаемый, иначе мало перспектив будет)
инфу черпал с ютуба, документаций и из вакансий банально узнавал стеки технологий и тыкался
помимо этого на js, php, c# пару семестров и потом забросил, питон роднее.
занимаюсь учебой, работаю курой в яндексе и просто сижу скроллю мож возьмут куда. При этом работал с сенькой из самоката над общим проектом, но я на подскоке был скорее, чем реально придумал что-то, но опыт от него перенял
>>53216
дада, клаудфаеры и прочая залупа. Ради приколы я мог бы селениумом открывать страницы и через распознавание текста парсить))))))))) но это чисто рофл ради рофла
В 2022 селениум об клаудфлейр при парсинге авито не спотыкался, кстати. Хз, как щас.
Это была консольная программка, которая хранила названия классов дом-элементов, содержащих название, рейтинг и цену и запускала селениум с такими вводными. Минусы очевидны - работать будет только на авито, перестанет работать, если названия классов поменяются.
Спасибо анон. А ты молодец.
>Парсить сайты можно через библу Beatifulsoup, в первых строчках прописываешь pip install для каждой нужнлй библы. Так же тебе потребуются минимальные знания HTML (любую сраную книжку на 150-200 страниц прочти и держи под рукой всегда)
так вы умники, сам и напиши. я первым делом через него и ебанул, только вот умные программисты сайта возвращают тебе 401 и требуют авторизацию пройти через куки
серьезно только и пиздите, потому что чтобы обойти 401 может тоже надо 2 строчки прописать
но ни я ни ты не привели способ как это сделать
Да я леденец знает. Везде паттерны просят. Это теперь стандарт
Мне кажется менеджерам привычно не думать в форме паттерна. Зачем им понимать что там за методы делающие реальную работу, если сверху паттерн а значит всё по красоте - такого берем
да анон, стоит хотя бы прочесть, потому что половину паттернов ты сам знаешь и вывел давно пока программировал для себя, потому что это это очевидная штука, либо штука, которая реально на лета схватывается
>так вы умники, сам и напиши
Нихуя себе ты охуел. У меня уже есть работа, я CG Technical Artist at Mail.ru. Это тебе работа здесь нужна.
Сука, я тебе даю подсказку:
import argparse (надежнее чем sys)
import requests
from bs4 import BeautifulSoup
import csv
import xlwt
import statistics
Касательно авторизации через request,
Все что тебе нужно чтобы тебя наледенец не послали - это sessionid, csrftoken, они даются через авторизацию(логин-пароль), если не даются попробуй другой интернет-магазин, если все магазины не работают, придумай свой воображаемый магазин и верни дателю леденецни и скажи, что 401 - не твои проблемы. В тестовом не указано.
Я для джуна написал, тупой ты непослушный мальчик. Если он не знает как парсить через 401 то он и не знает что такое функция
>эти названиях переменных
>тройная вложенность вейл
Наледенец съеби, чмо. Еще и не по теме высрал
Крепко тебя в анус выебли, однако.
>Дизайнер что ли?
Технический художник = {Художник 3D-графики(текстуры, анимация, анатомия, PBR) + программист (HLSL, C#, а так же Python для Blender 3D)}.
>Что рисуешь?
Твою голую мамку
Кейс 1.
Через полгода сайт который ты парсил перевели на другой движок. Свой код ты уже забыл или интегрировал в другой проект. Править его нельзя. Твои действия?
Кейс 2.
Для разных сайтов теперь разный набор полей которые надо парсить. Плюс попросили для сайта А добавить парсинг артикула и числа лайков и оценку в звёздочках. Уже написанный еод править нельзя. Твои действия?
>CG Technical Artist at Mail.ru
заступлюс за анона, работаю там же на той же позиции привет коллега
нарисую пару пенисов и кину в прод
напишу что это ты пенисы рисуешь. двач майлру принадлежит тебя заставят пенисы убрать твои отовсюду
>Через полгода сайт который ты парсил перевели на другой движок. Свой код ты уже забыл или интегрировал в другой проект. Править его нельзя. Твои действия?
в самом классе парсера можно передаваемый модуль запроса данных поменять без боли, главное чтобы возвращал json
> Для разных сайтов теперь разный набор полей которые надо парсить. Плюс попросили для сайта А добавить парсинг артикула и числа лайков и оценку в звёздочках. Уже написанный еод править нельзя. Твои действия?
значит, рефакторим модуль возврата данных сайта и через паттерн Директора с строителями закладываем фундамент того, чтобы можно добавлять сайты с кастомными полями
3 кейс
Ты забыл свой код, а тут возникла срочная потребность его распечатать и дрочить с ним вприсядку улюлюкая. Твои действия?
Звучит как наебалово))
>че думаете о тестовом на джуна?
Сотни откликов, ты все ещё витаешь в иллюзиях и на что-то надеешься?
Кейс 3.
Теперь сортировка не по алфавиту, а по рейтингу а если рейтинга нет то по цене, а с одинаковой ценой по алфавиту.
ох ты ж ё-моё! душная духота, а не задание. Я помню, когда джуном искал по c# вакансии, там давали задания даже с ui-интерфейсом сделать прогу. Хорошо что щас, когда я уже миддл, то можно без этих дурацких заданий проходить собесы
Пиздец ты кринжулька, начни с нейминга хотя бы
> значит, рефакторим
Ну вот и всё ты поплыл. Тебе на задачу дали 2 дня, а ты 2 недели будешь её делать, вспоминая и переделывая всё что делал. К тому моменту как сделаешь это уже будет не нужно, босс передумал. Ещё пару таких проёбов и ты уволен.
На тебе ездить будут. Такие как тот петух со своими КЕЙСАМИ. Всегда найдет к чему доох ты ж ё-моё!ся и придумать рандомной хуеты в условиях, которую он выдумал только что, лишь бы тебя заох ты ж ё-моё!
Задание элементарное, решается без знания программирования или на сраном рнр. А вот работодатели долбаёбы, держись подальше, они не понимают, что хотят. Купили бы а-парсер и хуеполучи в подарокли бы поддержку.
>Через полгода сайт который ты парсил перевели на другой движок. Свой код ты уже забыл или интегрировал в другой проект. Править его нельзя. Твои действия?
>Править его нельзя.
Тогда просто посмотреть что ничего не работает и поплакать, что доступы куда-то кто-то проебал. Во всех остальных случаях только править под новый движок.
https://dropmefiles.com/XzRcn
заебись код. побольше бы такого
Терпила-нетерпила, причем тут это, даун? Если ты "просто отвечаешь на вопросики", то это компании с маленькими зарплатами, какой смысл выебываться легким офером, если ты работаешь за 50-70 процентов от того, что получают в компаниях со сложными собеседованиями? У меня был офер на 2к долларов после собеседования, на котором не задали ни одного технического вопроса, только кринж по типу почему я выбрал свою профессию. И какой смысл в этом офере, если после нормального собеседования мне предложили х2 зарплату? В том чтобы выебываться в интернете? Тем более тут про джунскую должность, если ты джун, то у тебя конкуренция около 100 человек на место, не будешь делать тестовое - его с радостью сделают другие. Как тебя оценить, если у тебя опыта работы нет? Тратить время на каждого, кто откликнется? Час времени нормального разраба, который может принять решение о найме, стоит минимум от 1к рублей, на вакансию тысяча откликов - нужно потрать 1кк рублей на закрытие джунской вакансии, чтобы позадавать вопросы нетерпилам?
Ты отсталый даун.
Да-да, а ещё лучше на 1С пусть переходят, на Битрикс, там вообще вся работа компании из коробки. Купил за 100к и в леденец не дуешь, ведёшь бизнес. За 30к в год продляешь лицензию и кайфуешь. А главное всё само работает и ничего делать не надо.
Ну как с а-парсером примерно и прочими "готовыми" недорогими решениями на рынке.
Зачем своих программистов держать, лучше плати чужим, а ещё их менеджерам, их хр-у, их кабану, и пошло поехало.
Ой ну это ведь всё равно дешевле.
Да-да, апарсеролахта, да-да я поверил. Конечно дешевле оплатить их программиста и их поддержку и их менеджера и их кабана, чем оплатить одного своего.
>стоит минимум от 1к рублей
нахуя его дергать? на тех собес человек 10 из 100 допускаешь, половина из-за неадекватности отваливается
Да, конечно, а то я с 1С дел не имел и не знаю как этот наёб работает. Главное гоя подсадить на свою леденецню, а там он уже никуда не денется. Будет бля платить по 500 руб. в час за каждую доработочку а ещё перед этим ТЗ писать и всё будет сделано по ТЗ и ни на 1 грамм больше.
Итого фирма только выиграет. Вместо 1 ляма на кодера в год потратить 5 на бесплатное и дешёвое решение которое работает само.
Плавали, знаем. Иди наледенец.
> занимаюсь учебой, работаю курой в яндексе и просто сижу скроллю мож возьмут куда. При этом работал с сенькой из самоката над общим проектом, но я на подскоке был скорее, чем реально придумал что-то, но опыт от него перенял
Чтоб ты сдох в канаве пи́до́ра́с
За это не надо платить, если ты не шиз, который даже на винрар лицензию купит.
Да никто не будет смотреть какие ты там бизнес задачи решал, это вообще ни твоего ума дело. Зарабатыванием денег занимается менеджмент и руководство. Твоё дело давать им для этого инструменты, которые хотя бы не будут им МЕШАТЬ в этом, а ещё лучше будут помогать. Ты инженер, а не SEO. Делай так чтобы твоя программа пиздато выполняла поставленную задачу и ещё предугадывай какие там подводные и что может понадобится в будущем и чтобы это было поддерживаемо, стабильно и расширяемо.
Вот я ОПу три простых кейса кинул и оказалось что его программа хуёвая, потому что там нарушены принциы SOLID в тех местах где это не должно быть так. Логика прибита гвоздями, очень мало гибкости там где она нужна. Логику сортировки не поменять. Логику парсинга не поменять. Требуется переделывать уже написанный код. То есть кабан тебе будет платить за один и тот же код два раза просто потому что ты проебался в первый раз.
сеньор, ты? прости что прописал DROP TABLE
Половина от 100 это 50, а не 10.
Хорошо, пускай на техсобес проходит 10%, это 100к на закрытие джунской позиции и две с половиной рабочих недели непрерывных собеседований? Норм?
Тупое задание, никакой интересной логики, любой заводчанин после месяца курсов сделает за час, если не совсем тупой
БАТЯ МОЖЕТ И В ASM. НО, МНОГА БУКАФ.
>Логику сортировки не поменять
лол, поменять, вместо алфавитной передаешь желаемую, даже не трогая класс. Главный класс лишь отправляет запрос с данными, а логика сортировки уже на модуле висит
Parser1 = Parser(by_alpahbet)
Parser2 = Parser(by_kartu_taro)
Parser3 = Parser(pohui_sort_naugad)
>нет, бесплатно офкорс и не факт что фидбек
Так ведь ты им сам парсер не отдаёшь, только видео его работы. Нет? А задание нормальное, просто даже.
>две с половиной рабочих недели непрерывных собеседований? Норм?
обычно прогера на 2-3 дня снимают и уже проводят в эти 2-3 дня собесы. Алсо 100к это не так уж и много, если джунам хотя бы платить собираются. В нищих галерах такое себе, что даже бюджета на обучение не хватит
>Ну типа откликнулась тысяча лохов, из них 700 написали парсеры озона
А если им надо парсить не озон, а какие-то определенные сайты? Сайты в задании выбирает сам соискатель же.
А почему у тебя парсер вообще зависит от сортировки? Задача парсера - парсить. Он берёт ресурс, который надо парсить, применяет к нему определённый алгоритм, выдаёт результат работы алгоритма. Получение ресурса для парсинга, алгоритм парсинга - всё это должно быть отдельно и настраиваемо. Сортировка там вообще ни к чему.
>Ну лул, может ты мидл-сенька. Я хоть и имею опыт, но уже с пятницы копаюсь после работы вечером.
Парсер пишется за несколько часов. Ну, максимум сутки, если со всеми свистоперделками. Тут тебе даже гуй приделывать не надо. Рано тебе ещё работать, анон, учись. Пока что ты даже на джуна не снежная бабаешь. Без обид.
Ну и? Задание само по себе нормальное, но будь готов, что могут даже фидбека не дать из-за наплыва кандидатов.
Какой же в питоне код всратый...
Хз где такое происходит, обычно ставят 1-2 собеседования на 2 недели и этого уже достаточно, чтобы большинство ныло.
Схуяли он должен что-то там предвидеть и предчувствовать? Он сделал ровно то, что было задано.
>1)
>2)
>3)
Тесты, блядь. Хуесты. Тебе нужно написать простой скрипт для конторы из 40 человек, которая торгует шинами. А не эту леденецню. Можно вообще без ООПа обойтись. Пидoр, блядь. Из-за таких кубков, как ты, весь современный софт и веб тормозит к хуям. Желаю тебе рака дымоходы.
мне прост на прошлом тестовом, которое я написал на 150 строк сказали, что надо это все впихнуть и по папочкам с тестиками оформить. прости меня анон ((
Ну тебя просто мягко слили, скорее всего. Тесты на 150 строк кода это крайний ебанизм.
Да, это змея такая.
Бро, я тоже накидал и рефактнул, но 401 выдает, я также обьяснил этому челу HRу, он сказал что-то в уровне кабана:
работает? выдает? нет? ну гг отказ
Ему не скрипт нужно написать, а показать свои навыки, этим кодом не будут пользоваться по его прямому назначению, будут смотреть как он его написал, какие подходы использовал для решения задачи
Потому что он софтвар инженер, а у софта есть мировые стандарты качества, которые в данном случае не соблюдаются.
нет, там надо было прям работающий софт. мне давали тестовые тудушки, всякие организаторы работы, каких-то ботов ну не для коммерции, а тут конкретно рабочий софт запилить
мимо оп
Не важно где и что ты делаешь, нужно делать пиздато, иначе никогда ничему не научишься и всегда будешь волчарой печенье с молокомкодером.
401 это проблема кодера как раз таки.
4хх это в целом ошибки клиента.
Код надо писать так, чтобы не было ошибки с авторизацией. Это ж не сервер вдруг сломался, это ты к нему неправильно обращаешься.
>Просто я такое с помощью селениума делал
Хуениума. Очередной пидoр-долбоёб. Чтобы парсить сайты их конкурентов достаточно курла. Если ты озон или авито парсить хочешь, они, понятно, будут сопротивляться, а селениум палится очень сильно. Мудак, блядь.
Ну и правильно он тебе сказал, у тебя буквально не работает твоë решение. Надо делать так, чтобы работало. Чего ты ещë ожидал?
Мимо
ну так анон я знаю как сделать расширяемость и как этов се сделать. но мне лень
я смогу спроектировать такую систему, где все будет не печенье с молоком, но
это же просто парсер, который судя по всему был скамом
мимо оп
>че думаете о тестовом на джуна?
норм, обычное задание
надо им обычную консольную прогу с разбором параметров командной строки и работой с файлами. на пистоне это просто, надо заюзать готовые библиотеки. покупай книжку пистон за 21 день и делай
только работа с интернетом и парсеры -- это не джуниорские темы, но если найдешь подходящую библиотеку то норм
просто если им парсеры нужны в работе и они ищут именно таких программеров, то придется поднапрячся
>еС ЧО компания из 40 человек, продающие шины, в общем не бигтех
тогда и нет нужды напрягаться и писать сложное, как тут предлагают аноны. скорее всего твоя работа будет заключатся в поиске конкурентов, парсинге их сайтов на предмет цен и скидывания всего этого в эксель
а потом пойдет тупо демпинг или ценовая война. видимо ничего лучше кабанчик не смог придумать
>2022 селениум об клаудфлейр при парсинге авито не спотыкался,
Вот прям голый селениум без ничего?
>работа с интернетом и парсеры -- это не джуниорские темы
а что тут сложного помимо войны с 401?
Разве после парсинга N товаров крупные магазы не стали посылать на леденец уже давным давно?
Ну например, совсем умные отдают не 401 а мусор левый
А что должен делать джун?
если там стоит защита то звоночек. а если и нагрузку создашь, то подснежная бабаут как минимум. 401 это так сказать надпись на дороге
> дальше б-га нет
Взяли бы такого шиза к себе на работу?
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Змейка</title>
</head>
<body>
<script>
var MAP = {
cells: [],
food: []
};
var Z = {
l: 1,
body: [{x:9,y:9}],
d: "←"
}
var I = null;
var speed = 800;
var speed_up_food_required = 3;
var speed_up_food_current = 0;
var paused = false;
function createMap() {
var body = document.getElementsByTagName("body")[0];
var tbl = document.createElement("table");
var tblBody = document.createElement("tbody");
for (var j = 0; j < 20; j++) {
MAP.cells[j] = new Array();
var row = document.createElement("tr");
for (var i = 0; i < 20; i++) {
MAP.cells[j] = document.createElement("td");
var cell = MAP.cells[j];
cell.setAttribute("id", j+","+i);
cell.setAttribute("width", "10");
cell.setAttribute("height", "10");
row.appendChild(cell);
}
tblBody.appendChild(row);
}
tbl.appendChild(tblBody);
body.appendChild(tbl);
tbl.setAttribute("border", "2");
}
function colorCell(x, y, color) {
MAP.cells[y][x].style.backgroundColor = color;
}
function drawZ() {
for (var i = 0; i < Z.body.length; i++) {
colorCell(Z.body.x, Z.body.y, "red");
}
}
function moveZ() {
switch (Z.d) {
case "↑":
if (Z.body[0].y == 0) {
gameOver();
} else {
var newCell = {x:Z.body[0].x,y:(Z.body[0].y - 1)};
}
break;
case "→":
if (Z.body[0].x == 19) {
gameOver();
} else {
var newCell = {x:(Z.body[0].x + 1),y:Z.body[0].y};
}
break;
case "↓":
if (Z.body[0].y == 19) {
gameOver();
} else {
var newCell = {x:Z.body[0].x,y:(Z.body[0].y + 1)};
}
break;
case "←":
if (Z.body[0].x == 0) {
gameOver();
} else {
var newCell = {x:(Z.body[0].x - 1),y:Z.body[0].y};
}
break;
}
if (MAP.cells[newCell.y][newCell.x].style.backgroundColor == "red") {
gameOver();
}
Z.body.unshift(newCell);
if (MAP.cells[newCell.y][newCell.x].style.backgroundColor != "blue") {
var tail = Z.body.pop();
colorCell(tail.x, tail.y, "white");
} else {
removeFood(newCell.x, newCell.y);
colorCell(newCell.x, newCell.y, "red"); // потому что addFood считает все не красные ячейки свободными, то есть это чтобы еда случайно не заспавнилась там же
addFood();
speed_up_food_current++;
if (speed_up_food_current >= speed_up_food_required) {
speedUp();
speed_up_food_current = 0;
}
}
}
function mainLoop() {
moveZ();
drawZ();
}
function gameOver() {
clearInterval(I);
alert("Игра закончена.")
}
function keyHandler(e) {
e = e || window.event;
if (e.keyCode == '38') {
Z.d = "↑";
} else if (e.keyCode == '40') {
Z.d = "↓";
} else if (e.keyCode == '37') {
Z.d = "←";
} else if (e.keyCode == '39') {
Z.d = "→";
} else if (e.keyCode == '39') {
Z.d = "→";
} else if (e.keyCode == '19') {
if (paused) {
I = setInterval(mainLoop, speed);
} else {
clearInterval(I);
}
paused = !paused;
}
}
function addFood() {
var freeCells = new Array();
for (var j = 0; j < 20; j++) {
for (var i = 0; i < 20; i++) {
if (MAP.cells[j].style.backgroundColor == "red") {
continue;
} else {
freeCells.push(MAP.cells[j]);
}
}
}
if (freeCells.length == 0) {
gameOver();
} else {
var cell = freeCells[Math.floor((Math.random() * freeCells.length) + 0)];
var tmp = cell.id.split(",");
MAP.food.push({x:tmp[1],y:tmp[0]});
}
for (var k = 0; k < MAP.food.length; k++) {
colorCell(MAP.food[k].x, MAP.food[k].y, "blue");
}
}
function removeFood(x, y) {
for (var k = 0; k < MAP.food.length; k++) {
if (MAP.food[k].x == x && MAP.food[k].y == y) {
MAP.food.splice(k, 1);
}
}
}
function speedUp() {
if (speed <= 200) {
return;
} else {
speed -= 200;
}
clearInterval(I);
I = setInterval(mainLoop, speed);
}
// =========================================
createMap();
drawZ();
addFood();
I = setInterval(mainLoop, speed);
document.onkeydown = keyHandler;
</script>
</body>
</html>
Взяли бы такого шиза к себе на работу?
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Змейка</title>
</head>
<body>
<script>
var MAP = {
cells: [],
food: []
};
var Z = {
l: 1,
body: [{x:9,y:9}],
d: "←"
}
var I = null;
var speed = 800;
var speed_up_food_required = 3;
var speed_up_food_current = 0;
var paused = false;
function createMap() {
var body = document.getElementsByTagName("body")[0];
var tbl = document.createElement("table");
var tblBody = document.createElement("tbody");
for (var j = 0; j < 20; j++) {
MAP.cells[j] = new Array();
var row = document.createElement("tr");
for (var i = 0; i < 20; i++) {
MAP.cells[j] = document.createElement("td");
var cell = MAP.cells[j];
cell.setAttribute("id", j+","+i);
cell.setAttribute("width", "10");
cell.setAttribute("height", "10");
row.appendChild(cell);
}
tblBody.appendChild(row);
}
tbl.appendChild(tblBody);
body.appendChild(tbl);
tbl.setAttribute("border", "2");
}
function colorCell(x, y, color) {
MAP.cells[y][x].style.backgroundColor = color;
}
function drawZ() {
for (var i = 0; i < Z.body.length; i++) {
colorCell(Z.body.x, Z.body.y, "red");
}
}
function moveZ() {
switch (Z.d) {
case "↑":
if (Z.body[0].y == 0) {
gameOver();
} else {
var newCell = {x:Z.body[0].x,y:(Z.body[0].y - 1)};
}
break;
case "→":
if (Z.body[0].x == 19) {
gameOver();
} else {
var newCell = {x:(Z.body[0].x + 1),y:Z.body[0].y};
}
break;
case "↓":
if (Z.body[0].y == 19) {
gameOver();
} else {
var newCell = {x:Z.body[0].x,y:(Z.body[0].y + 1)};
}
break;
case "←":
if (Z.body[0].x == 0) {
gameOver();
} else {
var newCell = {x:(Z.body[0].x - 1),y:Z.body[0].y};
}
break;
}
if (MAP.cells[newCell.y][newCell.x].style.backgroundColor == "red") {
gameOver();
}
Z.body.unshift(newCell);
if (MAP.cells[newCell.y][newCell.x].style.backgroundColor != "blue") {
var tail = Z.body.pop();
colorCell(tail.x, tail.y, "white");
} else {
removeFood(newCell.x, newCell.y);
colorCell(newCell.x, newCell.y, "red"); // потому что addFood считает все не красные ячейки свободными, то есть это чтобы еда случайно не заспавнилась там же
addFood();
speed_up_food_current++;
if (speed_up_food_current >= speed_up_food_required) {
speedUp();
speed_up_food_current = 0;
}
}
}
function mainLoop() {
moveZ();
drawZ();
}
function gameOver() {
clearInterval(I);
alert("Игра закончена.")
}
function keyHandler(e) {
e = e || window.event;
if (e.keyCode == '38') {
Z.d = "↑";
} else if (e.keyCode == '40') {
Z.d = "↓";
} else if (e.keyCode == '37') {
Z.d = "←";
} else if (e.keyCode == '39') {
Z.d = "→";
} else if (e.keyCode == '39') {
Z.d = "→";
} else if (e.keyCode == '19') {
if (paused) {
I = setInterval(mainLoop, speed);
} else {
clearInterval(I);
}
paused = !paused;
}
}
function addFood() {
var freeCells = new Array();
for (var j = 0; j < 20; j++) {
for (var i = 0; i < 20; i++) {
if (MAP.cells[j].style.backgroundColor == "red") {
continue;
} else {
freeCells.push(MAP.cells[j]);
}
}
}
if (freeCells.length == 0) {
gameOver();
} else {
var cell = freeCells[Math.floor((Math.random() * freeCells.length) + 0)];
var tmp = cell.id.split(",");
MAP.food.push({x:tmp[1],y:tmp[0]});
}
for (var k = 0; k < MAP.food.length; k++) {
colorCell(MAP.food[k].x, MAP.food[k].y, "blue");
}
}
function removeFood(x, y) {
for (var k = 0; k < MAP.food.length; k++) {
if (MAP.food[k].x == x && MAP.food[k].y == y) {
MAP.food.splice(k, 1);
}
}
}
function speedUp() {
if (speed <= 200) {
return;
} else {
speed -= 200;
}
clearInterval(I);
I = setInterval(mainLoop, speed);
}
// =========================================
createMap();
drawZ();
addFood();
I = setInterval(mainLoop, speed);
document.onkeydown = keyHandler;
</script>
</body>
</html>
Как обходить хитровыебанные капчи? Давно уже нигде нет простой текстовой. Это явно задача не для джуна
Двaчую этого пидoра, кстати.
Я на питухоне не пишу, может у вас там сплошные библиотеки под взлом дымоходы сайтов, не знаю. Но выглядит так, что кабанчик хочет бесплатно сделать таску. Слишком специфичное задание и странное требование прислать готовый код с демонстрацией. У тебя же собеседование якобы по этому заданию должно быть, логичнее было спрашивать на собеседовании, почему нужнг прислать видео? Как будто сам код хотят, а собеседовать по нему не хотят.
Пишу простенькие парсеры для ИП Залупкин и ООО Ромашка. Буквально там на 1000 позиций.
Постоянно надо учитывать бан IP, всегда берем прокси. Часто нужно парсить с браузера, чисто на curl уже не всегда работает
Для выполнения этого задания мы можем использовать два популярных парсера: один на базе библиотеки `requests` и `BeautifulSoup` для парсинга HTML страниц, а второй с использованием библиотеки `Selenium` для более сложных сайтов, которые используют JavaScript. В обоих случаях результаты можно сохранять в форматах CSV и XLS с помощью библиотеки `pandas`.
Вот пример решения:
1. Установка необходимых библиотек:
```bash
pip install requests beautifulsoup4 pandas openpyxl selenium
```
2. Описание парсеров:
- Парсер 1: Будет использовать `requests` и `BeautifulSoup` для сбора данных с простой HTML-страницы.
- Парсер 2: Использует `Selenium` для сбора данных с динамических страниц.
3. Техническое задание:
- Два парсера для сбора цен и остатков товаров.
- Сохранение в CSV или XLS.
- Сортировка по алфавиту.
- Медианное значение цен.
4. Пример кода:
```python
import requests
from bs4 import BeautifulSoup
import pandas as pd
import argparse
import math
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
# Парсер 1: с использованием requests и BeautifulSoup
def parse_shop_1():
url = 'https://example.com/products'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
products = []
for product_div in soup.find_all('div', class_='product-item'):
name = product_div.find('h2').text.strip()
price = product_div.find('span', class_='price').text.strip()
products.append((name, price))
return products
# Парсер 2: с использованием Selenium (например, для динамически загружаемых страниц)
def parse_shop_2():
url = 'https://example.com/products'
driver = webdriver.Chrome(executable_path='/path/to/chromedriver')
driver.get(url)
time.sleep(5) # Подождать, чтобы все данные загрузились
products = []
product_elements = driver.find_elements(By.CLASS_NAME, 'product-item')
for product in product_elements:
name = product.find_element(By.CLASS_NAME, 'product-name').text.strip()
price = product.find_element(By.CLASS_NAME, 'price').text.strip()
products.append((name, price))
driver.quit()
return products
# Функция для сохранения данных в файл
def save_to_file(products, filename, file_format, sort_order):
# Преобразуем цены в числовой формат для вычисления медианы
products = [(name, float(price.replace('₽', '').replace(' ', '').strip())) for name, price in products]
# Сортировка
if sort_order == 'asc':
products.sort(key=lambda x: x[0].lower())
else:
products.sort(key=lambda x: x[0].lower(), reverse=True)
# Преобразуем данные в DataFrame
df = pd.DataFrame(products, columns=['Name', 'Price'])
# Вычисляем медиану
median_price = df['Price'].median()
print(f'Median price: {median_price:.2f} ₽')
# Сохраняем в файл
if file_format == 'csv':
df.to_csv(filename, index=False)
elif file_format == 'xls':
df.to_excel(filename, index=False)
# Главная функция
def main():
parser = argparse.ArgumentParser(description="Парсинг товаров с интернет-магазинов.")
parser.add_argument('--parser', choices=[1, 2], required=True, help="Выбор парсера: 1 или 2")
parser.add_argument('--format', choices=['csv', 'xls'], required=True, help="Выбор формата файла: csv или xls")
parser.add_argument('--sort', choices=['asc', 'desc'], default='asc', help="Порядок сортировки: asc или desc")
parser.add_argument('--filename', required=True, help="Название файла для сохранения")
args = parser.parse_args()
# Выбираем парсер
if args.parser == 1:
products = parse_shop_1()
else:
products = parse_shop_2()
# Сохраняем в файл
save_to_file(products, args.filename, args.format, args.sort)
if __name__ == '__main__':
main()
```
### Описание кода:
1. Парсер 1 (`parse_shop_1`): Использует `requests` для получения HTML-страницы и `BeautifulSoup` для извлечения нужных данных (название товара и цена).
2. Парсер 2 (`parse_shop_2`): Использует `Selenium` для парсинга динамически загружаемых данных с помощью браузера.
3. Функция сохранения данных (`save_to_file`): Сохраняет данные в CSV или XLS файл и сортирует их по алфавиту в зависимости от параметра сортировки.
4. Медиана: Рассчитывается с использованием библиотеки `pandas`.
5. Аргументы командной строки:
- `--parser`: Выбор парсера (1 или 2).
- `--format`: Формат файла (csv или xls).
- `--sort`: Порядок сортировки (asc или desc).
- `--filename`: Имя файла для сохранения.
### Пример запуска:
```bash
python parser.py --parser 1 --format csv --sort asc --filename products.csv
```
### Дополнительные замечания:
- Для работы с Selenium необходимо скачать [ChromeDriver](https://sites.google.com/a/chromium.org/chromedriver/) и указать путь в `webdriver.Chrome(executable_path='/path/to/chromedriver')`.
- Код будет работать на реальных страницах, если структура HTML соответствует ожидаемой. В реальных случаях возможно потребуется адаптировать CSS-селекторы.
мимо чатгпт
Для выполнения этого задания мы можем использовать два популярных парсера: один на базе библиотеки `requests` и `BeautifulSoup` для парсинга HTML страниц, а второй с использованием библиотеки `Selenium` для более сложных сайтов, которые используют JavaScript. В обоих случаях результаты можно сохранять в форматах CSV и XLS с помощью библиотеки `pandas`.
Вот пример решения:
1. Установка необходимых библиотек:
```bash
pip install requests beautifulsoup4 pandas openpyxl selenium
```
2. Описание парсеров:
- Парсер 1: Будет использовать `requests` и `BeautifulSoup` для сбора данных с простой HTML-страницы.
- Парсер 2: Использует `Selenium` для сбора данных с динамических страниц.
3. Техническое задание:
- Два парсера для сбора цен и остатков товаров.
- Сохранение в CSV или XLS.
- Сортировка по алфавиту.
- Медианное значение цен.
4. Пример кода:
```python
import requests
from bs4 import BeautifulSoup
import pandas as pd
import argparse
import math
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
# Парсер 1: с использованием requests и BeautifulSoup
def parse_shop_1():
url = 'https://example.com/products'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
products = []
for product_div in soup.find_all('div', class_='product-item'):
name = product_div.find('h2').text.strip()
price = product_div.find('span', class_='price').text.strip()
products.append((name, price))
return products
# Парсер 2: с использованием Selenium (например, для динамически загружаемых страниц)
def parse_shop_2():
url = 'https://example.com/products'
driver = webdriver.Chrome(executable_path='/path/to/chromedriver')
driver.get(url)
time.sleep(5) # Подождать, чтобы все данные загрузились
products = []
product_elements = driver.find_elements(By.CLASS_NAME, 'product-item')
for product in product_elements:
name = product.find_element(By.CLASS_NAME, 'product-name').text.strip()
price = product.find_element(By.CLASS_NAME, 'price').text.strip()
products.append((name, price))
driver.quit()
return products
# Функция для сохранения данных в файл
def save_to_file(products, filename, file_format, sort_order):
# Преобразуем цены в числовой формат для вычисления медианы
products = [(name, float(price.replace('₽', '').replace(' ', '').strip())) for name, price in products]
# Сортировка
if sort_order == 'asc':
products.sort(key=lambda x: x[0].lower())
else:
products.sort(key=lambda x: x[0].lower(), reverse=True)
# Преобразуем данные в DataFrame
df = pd.DataFrame(products, columns=['Name', 'Price'])
# Вычисляем медиану
median_price = df['Price'].median()
print(f'Median price: {median_price:.2f} ₽')
# Сохраняем в файл
if file_format == 'csv':
df.to_csv(filename, index=False)
elif file_format == 'xls':
df.to_excel(filename, index=False)
# Главная функция
def main():
parser = argparse.ArgumentParser(description="Парсинг товаров с интернет-магазинов.")
parser.add_argument('--parser', choices=[1, 2], required=True, help="Выбор парсера: 1 или 2")
parser.add_argument('--format', choices=['csv', 'xls'], required=True, help="Выбор формата файла: csv или xls")
parser.add_argument('--sort', choices=['asc', 'desc'], default='asc', help="Порядок сортировки: asc или desc")
parser.add_argument('--filename', required=True, help="Название файла для сохранения")
args = parser.parse_args()
# Выбираем парсер
if args.parser == 1:
products = parse_shop_1()
else:
products = parse_shop_2()
# Сохраняем в файл
save_to_file(products, args.filename, args.format, args.sort)
if __name__ == '__main__':
main()
```
### Описание кода:
1. Парсер 1 (`parse_shop_1`): Использует `requests` для получения HTML-страницы и `BeautifulSoup` для извлечения нужных данных (название товара и цена).
2. Парсер 2 (`parse_shop_2`): Использует `Selenium` для парсинга динамически загружаемых данных с помощью браузера.
3. Функция сохранения данных (`save_to_file`): Сохраняет данные в CSV или XLS файл и сортирует их по алфавиту в зависимости от параметра сортировки.
4. Медиана: Рассчитывается с использованием библиотеки `pandas`.
5. Аргументы командной строки:
- `--parser`: Выбор парсера (1 или 2).
- `--format`: Формат файла (csv или xls).
- `--sort`: Порядок сортировки (asc или desc).
- `--filename`: Имя файла для сохранения.
### Пример запуска:
```bash
python parser.py --parser 1 --format csv --sort asc --filename products.csv
```
### Дополнительные замечания:
- Для работы с Selenium необходимо скачать [ChromeDriver](https://sites.google.com/a/chromium.org/chromedriver/) и указать путь в `webdriver.Chrome(executable_path='/path/to/chromedriver')`.
- Код будет работать на реальных страницах, если структура HTML соответствует ожидаемой. В реальных случаях возможно потребуется адаптировать CSS-селекторы.
мимо чатгпт
>>55044
Задание простенькое, давно таких не видел. Разобраться можно за вечер или за два. Делай.
Сроки можешь выставить чуть с запасом, обязательно аргументируй это по типу "8 часов заложил на возможные непредвиденные обстоятельства в процессе выполнения и устранение их последствий" или что-то около того, таким образом покажешь ответственность и предусмотрительность.
Через чатгпт не делай, в таких вещах гораздо полезнее разбираться самому.
Удачи!
А что не так?
Тут уже советовали заливать решение на GitHub. Заодно сможешь показывать его на других собесах.
А не надо Я вам сам перезвоню.
подпишите nda на свой же код, мы вам перезвоним
В смысле взял? Я с нуля писал. За несколько часов сделал. Я тогда хорошо так пушил JS плюс до этого писал свои печенье с молокомигры, так что для меня всё это было легко.
Лет 10 назад, когда пытался в кодинг, то фрилансил и писал такие парсеры. Я уже заранее привык, что в жизни всегда наёбывают. Потому в парсер прописал следующий код: если по определенному адресу есть определенный текст, то выбить ошибку и завершить работу. После этого отдал парсер заказчику. Тот потестировал работу, потом сказал, что леденецня и не заплатил. Я через неделю выключил парсер, он прибежал с горящей дымоходой и отдал всё до копеечки, сколько изначально договорились.
Если лень, то просто вшиваю в код запись, что через неделю сам перестает работать, тупо сверяет дату. Если человек оплатит, то я просто ему скажу "ой вот тут мелкую ошибку поправил" и вышлю ему исправленную версию
Да, но больше заебешься. Они медленные, тормозят, отваливаются. Проще платные купить и спарсить быстренько
Вот, а то все говорят про наёб и неоплату. Так и надо.
Голова болит когда вижу такие коды. Почему нельзя написать минимально и красиво.
> если по определенному адресу есть определенный текст, то выбить ошибку и завершить работу
Сычев! неправильно if используете. Надо оптимизировать. Завершать работу, если текста НЕТУ на каком-то адресе, а наоборот!
Ну это дичь какая-то. Если городить каждый раз отдельный модуль и отдельный класс на любой новый функционал, ты очень быстро начнешь в этом всем путаться, а проект разрастается как леденец знает что. Я уж молчу про производительность. Да, нужно разбивать проект на модули, но только по высокоуровневому функционалу:
- модуль загрузки данных с сайта и парсинга
- модуль обработки данных и подсчета статистик
- модуль работы с файловой системой
и т.д.
Внутри уже можно разбивать на классы, типа отдельный класс для загрузки с сайта, отдельный класс для парсинга и т.д.
Городить же отдельные модули для сортировки данных и подсчета медианы это шиза, я бы даже отдельный класс для этого делать не стал, там обе задачи решаются через функции по 5 строчек кода.
>Получение ресурса для парсинга, алгоритм парсинга - всё это должно быть отдельно и настраиваемо.
Кому должно?
1. Проверять работу могут дольше одного дня. Редко кто посмотрит в первый же день, все проверит и в тот же день оплатит. Даже недели может не хватить так-то
2. Если же кинули, то наоборот заебись, что через неделю нихуя не работает. Сроки истекли, искать/нанимать некогда, нужна рабочая версия прямо сегодня. Так что им проще заплатить
3. Не смогут свалить на меня неработоспособность кода, типа я там по удаленке/ФТП подключился и испортил им якобы все. Потому что кидалы быстро меняют доступы
Думаю, вкатываться в программирование в 2025 - быть тотальным долбаёбом.
>аждый раз отдельный модуль и отдельный класс на любой нов
есть какая-то литература или что-то такое, чтобы научиться правильно проектировать, чтобы не было шизы такой?
мимо
>только работа с интернетом и парсеры -- это не джуниорские темы
А какие темы тогда джуниорские?
Ясно. Подумал что за неделю парсер уже отработает и устареет.
Посадить девочьку на двачевание капчь и сделать так, чтобы капчьи не вылезали слишком чясто.
>Использует `Selenium` для сбора данных с динамических страниц.
Можно парсить не сами страницы, можно парсить непосредственно те данные, которые апи сайта отправляет этим страницам. Не?
Я бы что-нибудь про паттерны проектирования почитал, вроде Head First Design Patterns. Это как раз про то, как нужно писать и компоновать код для решения той или иной задачи + общие советы по написанию кода вроде KISS, DRY, SOLID и т.д.
Там код на джава, но мне как питонисту все понятно было, за исключением некоторых деталей вроде интерфейсов или другого механизма наследования.
Нормальное задание, на работе примерно этим же и будешь заниматься +-
Спасибо чатждпти.
Хороший гои. Теперь вышли код и видео туториал, покажи как все работает. А мы вам перезвоним.
Есть такой сайт refactorguru там буквально под питон все шаблоны выведены, да и не только под него + классное обьяснение
да, хороший сайт
никогда не бери тестовые задания которые по времени занимают больше двух часов.
любого кандидата можно прособеседовать онлайн скринингом за час, либо дать небольшое задание на пару часов и уже по его результату пообщаться. все те кто дает задание на выполнение которого уйдет день или больше это ебанаты и даже если они тебя возьмут условиям труда ты явно рад не будешь
> никогда не бери тестовые задания которые по времени занимают больше двух часов и сиди без работы
Судя по твоему посту - хороший инструмент отсева долбоящеров
Не хочу тебя расстраивать, но 99% рабочих задач обычного мартыхана не требует написания алгоритмов, скорее всего за тебя уже все придумано и сделано, и нужно скорее уметь гуглить, уметь разбивать задачу на подзадачи и если важен перформанс уметь тестировать код на этот перформанс. Скорее важно видеть, что если решать в лоб, то алгоритм будет медленным, и искать как умные люди уже решили эту задачу (нейронки с этим охуенно справляются, кстати)
Я на такие ответы просто не отвечаю.
Делать больше нечего, как выполнить тестовые задания, тратить на это свое время, и в конце поучить "мы вам перезвоним".
Когда работодатель заинтересован в кандидате, это чувствуешь сразу с начала диалога.
А все эти - заполни анкету, сделай тест. Это все Просто трата времени в пустую.
Простецкое задание лол
Не делай, потом пожалеешь, все равно не возьмут. Если и возьмут, то за лоупрайс, так как ты сделал тестовое задание, значит терпила. Откликайся дальше.
Раз уж тут наносеки программисты собрались. Я правильно понимаю, что сейчас основная проблема в поиске инфы, это поисковики? Вот взять ВК. Прон, в том числе и процессорный, там как был так и есть, его просто отыскать от сложно до очень сложно стало. То же самое с гуглами/яндексами. Первые страницы реклама и правильные ссылки, а неправильные просто не выдаёт. Можно ли создать свой поисковик, да ещё если к нему нейронку прикрутить, которая ы понимала запрос. Это реализуемо?
А что, хорошее пиво.
За такое форматирование нужно пиздить до кровавых соплей
> Ну это дичь какая-то. Если городить каждый раз отдельный модуль и отдельный класс на любой новый функционал
Дурак, это буквально основной паттерн разработки, каждая сущность должна делать только что-то одно и не больше. Первая буковка у солида, если что
Так вопрос ресурсов, можно сделать поисковик под ВК, но там в апи должны быть методы дающие возможность индексировать текстовое описания даже в закрытых группах, то можно процессорный поисковик запилить, но там скорее всего этого нет в открытом АПИ. А парсить вообще сайты в интернете очень дорого по инфраструктуре, думаешь независимых поисковиков до сих пор нет потому что никто не догадался их сделать? Нет, там тупо на серваках разоришься.
Я не совсем понял что ты имел ввиду, но чатгпт это буквально поиск информации с нейронкой, которая понимает что именно ты хочешь
Бля, сразу видно идеального додика для какой нибудь сберпараши, в начале год анализировать требования, потом писать красивй ООП код ещё год, потом выяснить что это печенье с молоком, что вы писалли никому не надо и закрыть проект. Причем делать это всё коллективом в 100 человек, хотя реально там писать рабочий проект в 5 человек максимум. Но в сбере это будут писать 100. Хотя уже давно есть книги с критикой многих паттернов и прочего печенья с молоком, но в РФ их не читали.
Прикольное задание.
Когда то питон учил, сам такие парсеры писал.
Если ссышь, что их будут использовать, то костылик поставить с лотереей
Хотя ты джун, я бы на месте кабана лучше бабла отвалил за норм парсер, чем чет джуновское юзал.
Ну да, пориджу-вкатуну вроде тебя, который выпук какого то блогера посмотрел, намного понятнее как писать надёжный легко поддерживаемый и расширяемый проект, чем дядям, которые эти системы всю жизнь разрабатывают
Нах.уй идёшь со своим 2 часов. Я е.бал. Что там два часа делать? Максимум час и все. Встаю хожу или отключаю.
Я вам могу написать и рассказать банальные алгоритмы. Это не проблема . Хорошо поняли мы вам перезвоним. Лел.
Я уже 20 лет программирую, моя позиция в том, что паттерны это хуита полная, важна экспертиза в доменной области у команды и слаженность, тогда всё получится. Лучше всего код читается когда он вообще на одной странице и написан экспертом, который понимает не код, а саму задачу. Я сам провожу собесы, так для меня паттерны во главе угла у чела, так это сразу минус в карму. И в целом сбер, яндекс, тинек, сразу редфлаг для найма. ещё ни одного оттуда не видел, реально полезного в деле разраба.
>можно
На самом деле леденец поймёшь, если не давать задачу на день, то вообще пиздец. Есть куча ебаласов, которые тупо надрочились проходить собесы, но кодить не умеют вообще. Мне такие попадались, приходилось увольнять на испытательном. Мне проще взять чела даже без собеса, если грамотно напишет комменты к коду. Ну или минимально с ним поговорить
На С++, ещё был опыт на ява и дотнет по несколько лет. Плюс современный ПХП уже не так прост, да и раньше там были очень продвинутые фреймворки типа ларавелль написанные во многих частях на чистом си.
Тогда хyй сoси, губой тряси.
В 2016 или около, пришёл на собес, развернул строку и под аплодисменты с фанфарами устроился джуном. Да, тогда настолько легко было вкатиться. Сейчас пиздец какой-то. То что ОПу дают как тест тогда бы за неделю лениво пилилось сениором. Сами себе планочку задрали и еще гордимся.
Вы видите копию треда, сохраненную вчера в 15:17.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.