Как спарсить сайт с авторизацией
Перейти к содержимому

Как спарсить сайт с авторизацией

  • автор:

Как парсить сайты с авторизацией?

Парсер с использованием Anglesharp. Как парсить сайты с авторизацией?
Я пробую написать парсер.
Если я правильно понял теорию, то логика должна быть следующая:
— авторизация;
— получить куки;
Движение по страницам
— отправить куки;
— перейти на страницу_1;
— отправить куки;
— перейти на страницу_2; Форма авторизации

  
Забыли пароль?

Минимальный код

public async void Authorization(string pathPageLogin, string userName, string password) < IConfiguration config = Configuration.Default.WithDefaultLoader().WithCookies(); IBrowsingContext browsingContext = BrowsingContext.New(config); browsingContext.OpenAsync(pathPageLogin).Wait(); (browsingContext.Active.QuerySelector("input[name = 'login[login]']") as IHtmlInputElement).Value = userName; (browsingContext.Active.QuerySelector("input[name = 'login[password]']") as IHtmlInputElement).Value = password; (browsingContext.Active.QuerySelector("form") as IHtmlFormElement).SubmitAsync().Wait(); >public async void Parsing(string url, string pathFileHtml) < HttpClient client = new HttpClient(); var response = await client.GetAsync(url); // скачиваем страницу string source = await response.Content.ReadAsStringAsync(); // Переносим в переменную #region Сохранить страницу в файл File.WriteAllText(pathFileHtml, source); #endregion Сохранить страницу в файл #region Парсер // HTML парсер, который доступен из "AngleSharp". var domParser = new HtmlParser(); // Спарсим асинхронно наш исходный код и получим документ с которым мы можем работать var document = await domParser.ParseAsync(source); // *** Парсер **** // результат var list = new List(); var items = document.QuerySelectorAll("a").Where(item => item.ClassName != null && item.ClassName.Contains("post__title_link")); foreach (var item in items) < list.Add(item.TextContent); >#endregion > 

Вопросы.
1. Правильно ли я понимаю логику?
2. Как сделать код с минимальным набором основных методов для простых сайтов, чтобы было видно принцип логики? Дополнение
Для примера использовать: rabota.by/login/ Дополнение
Логин — [email protected]
Пароль — Ym3LDp1FPs Дополнение

Отслеживать
28.7k 4 4 золотых знака 40 40 серебряных знаков 79 79 бронзовых знаков
задан 22 дек 2018 в 17:23
313 2 2 серебряных знака 7 7 бронзовых знаков

Советую вам проверить, есть ли у сайта API, куда он при авторизации отправляет запросы, куда он отправляет запросы при получение контента и так далее. Очень часто бывает, что разбирать HTML совсем не обязательно!

22 дек 2018 в 17:40

@EvgeniyZ Дополнил вопрос. Если у вас есть возможность, не могли бы вы привести примеры кода как для приведённого сайта это может выглядеть. Я пробовал: собрал логирование, пробую проверить, залогинился или нет. Не получается. Где в браузере смотреть POST запросы знаю, но что от туда брать не понимаю. Вроде только логин и пароль отправляет. Хотелось бы на примере кода посмотреть. А то я уже начитался, насмотрелся. Пробую реализовать, не получается..

22 дек 2018 в 17:52

@climivin Я вам ответом постарался рассказать как лучше поступить (правда пока не до конца), получите Cookie, получите полный доступ к ресурсу. К примеру вот такой набор данных я получил по POST запросу на адрес https://rabota.by/tradeslist/ . Другими словами у сайта есть API и вам стоит научиться с ним работать.

23 дек 2018 в 1:15

@climivin Ну смотрите, раньше все сайты работали по принципу «пользователь зашел на страницу — сайт выдал дизайн с уже загруженными данными». Это не очень хорошо сказывалось на отзывчивости сайта, он был «топорным», постоянно обновлять страницу приходилось. Сейчас все современные сайты работают по принципу «пользователь зашел — загрузил дизайн без данных — часть нужных данных подгружается после, фоном». То есть сейчас идет разделение дизайна и данных сайта. Это позволяет сделать автоматическое обновление контента без перезагрузки страницы, сайт становится более отзывчивым и дружелюбным.

23 дек 2018 в 9:45

@climivin вот такие сайты создают себе источник данных, обычно это их внутренний API, о котором они не говорят, но мы же можем отловить эти запросы. Возьмем к примеру получение награды в игре. Пользователь видит кнопку и при клике на нее идет POST запрос допустим на адрес /api/getReward/ с помощью JS. Пользователю моментально, без обновления страницы, приходит уведомление об награде. Вот Вот при нажатие кнопки мы увидим в отладчике этот API запрос. Так что если сайт новый, то у него 80% есть API с которым и надо работать.

23 дек 2018 в 9:50

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Анализируем.

Первым делом надо проанализировать сайт и понять как он работает. Я лично буду использовать Fiddler для отлова запросов, вы это можете делать там, где вам удобно.

И так, заходим на страницу авторизации, включаем отлов запросов, авторизуемся и смотрим на запросы.
Обычно они выглядят довольно заметно и идут на страницу вида /login или что то в этом духе.

Result

После авторизации на сайте я поймал такой запрос:

Смотрим сам запрос:

POST /login/ HTTP/1.1 Host: rabota.by Connection: keep-alive Content-Length: 186 Cache-Control: max-age=0 Origin: https://rabota.by Upgrade-Insecure-Requests: 1 DNT: 1 Content-Type: application/x-www-form-urlencoded User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36 Vivaldi/2.2.1388.37 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 Referer: https://rabota.by/ Accept-Encoding: gzip, deflate, br Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7 Cookie: sessionRabota=4t8r5v068lb7g9alo3; _ga=GA1.2.20569718.1545649; _gid=GA1.2.202925.15449; _ym_uid=15595112; _ym_d=154552; _ym_isad=1; _ym_visorc_2318=w; 388c2c03bbed9f4661; captcha=4509285; captcha_md5=59bf907333254603af10; arp_scroll_position=0; *0=*0 
  • Первым делом нас тут интересует тип запроса, у нас это POST на адрес /login/ .
  • Далее смотрим на тип передаваемых данных Content-Type: application/x-www-form-urlencoded .
  • Также может пригодиться User-Agent и некоторые Cookie .

Так, как у нас запрос с данными веб формы, то также стоит посмотреть его тело:

login[login] [email protected] login[password] pass login[remember] 1 submitButton Войти login[type] cad5afb6ed280bc4041d5689d561144a 

Здесь все довольно понятно — наши логин, пароль, запоминать или нет, имя кнопки и неизвестный параметр с логина. Проверим этот неизвестный параметр, просто проделав авторизацию еще раз. Если он изменится, то стоит искать как он формируется, если нет, то можно использовать его. В моем случае он статичный.

Ну и еще стоит посмотреть сам ответ сервера, что он отдает и что он устанавливает:

Content-Type: text/html; charset=UTF-8 Set-Cookie: *0=%2A0; expires=Wed, 12-Dec-2018 19:21:31 GMT; Max-Age=-864000; path=/; domain=rabota.by Set-Cookie: 666c9aea5601eb92b8=7df1b7318a82be0b068b; expires=Tue, 22-Jan-2019 19:21:32 GMT; Max-Age=2678400; path=/; httponly Set-Cookie: d2c3f55839194555558=f33b13af8cfcd2d14c8650; expires=Tue, 22-Jan-2019 19:21:32 GMT; Max-Age=2678400; path=/; httponly 

Видно, что в ответ сервер отдает нам обычный html и устанавливает пару Cookie. Тело ответа смотреть пока бессмысленно.

Пробуем отправить запрос сами.

Для этих целей отлично подходит Postman. Устанавливаем, пропускаем авторизацию (или нет) и создаем новый запрос.

  • Выбираем POST.
  • Указываем адрес запроса https://rabota.by/login
  • [вкладка Body] Указываем тип данных x-www-form-urlencoded
  • [вкладка Body] Заполняем все поля запроса
  • Пробуем отправить запрос.
  • Смотрим данные (HTML). И видим там, что простой отправки данных нам не достаточно, сайт не авторизует нас. Что то не хватает. Обычно это либо заголовок UserAgent или какой то уникальный, либо Cookie.
  • Пробуем добавить UserAgent — не подошел.
  • Пробуем подобрать Cookie — и тут видим, что сайт наконец нас пустил (в HTML видим свои данные).

Теперь очистим запрос:

  • Удаляем из Cookie по одному, пока не перестанет отправлять нам нужные данные. Я лично выяснил, что нужны всего одна Cookie — *0=*0 .
  • [вкладка Body] Тут по такому же принципу, убираем все не нужное, убирая просто галки. Мои наблюдения показывают, что достаточно всего лишь login[login] , login[password] и login[type] .
  • [вкладка Headers] Убираем также лишние заголовки. На авторизацию влияют Content-Type и Referer .

Парсинг сайта с применением авторизации

Любой, кто когда-либо пытался парсить сайты на python начинал с простого запроса «get» библиотеки «requests». Запрос «get» выгружает html код страницы, который можно обрабатывать под свои нужды.

Но иногда данные доступны только после авторизации на ресурсе. В этом посте я покажу, как можно подключаться, используя логин-пароль и библиотеку «requests».

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

Возьмем сайт https://ivi.ru/ и попытаемся залогиниться.

Для авторизации требуется ввести email и пароль. В библиотеке requests есть метод «POST», с помощью которого реализуются отправки данных на сервер. Общий вид использования метода: «requests.post(url, headers, data)». «url» ссылка на ресурс, «headers» заголовки запроса, «data» данные запроса, которые мы будем передавать.

Импорт, авторизация и исходные параметры

pip install requests

Прежде всего, нужно узнать, откуда брать данные «headers» и «data». Для этого запустим инструмент разработчика. Переходим во вкладку СЕТЬ и обновляем страницу. Здесь видим все активности сети.

На главной странице сайта входим в профиль. Открывается форма авторизации, вводим логин-пароль и нажимаем кнопку ВОЙТИ. Ищем нашу ссылку.

Чтобы быстрее находить нужную строку в отображении полей нужно добавить поле «Method» и по нему отсортировать столбец. Данные на авторизацию отправляются в «POST» запросах.

Находим строку v5/

Смотрим информацию по этой строке

Во вкладке «headers» находим «General» в нем возьмем «url», в «Request Headers» нас интересует только «User-Agent», который пропишем в «headers», в «Form Data» данные для запроса «data».

import requests
url = 'https://api.ivi.ru/mobileapi/user/login/ivi/v5/'
headers = < 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36' >
data =

Создаем сессию, она будет держать наше соединение с сайтом, и мы сможем с ним работать.

session = requests.Session() session.headers.update(headers) response = session.post(url, data=data) 

Смотрим статус ответа

response

Ответ 200 означает успешный ответ от сервера.

Посмотрим, что возвратил наш запрос

response.json()
, 'email': 'test@yandex.ru', 'email_real': 1, 'msisdn': '', 'confirmed': 1, 'storageless': False, 'is_debug': False, 'children': [], 'basic': '0.0000', 'bonus': '0.0000'>> 

Здесь важная строка «session», которая указывает на наш номер сессии. Дальше в примере будет видно, что, если бы мы не создали сессию, изменить данные нам бы не удалось.

Попробуем поменять данные профиля. Нажимаем на кнопку редактировать и меняем имя.

Ищем в инструменте разработчика нашу строку. Чтобы не было много записей, можно сразу же после нажатия кнопки сохранить остановить загрузку страницы, «POST» запрос на изменение будет идти первым, только после этого происходит загрузка страницы с обновленными данными.

Записываем «url» и копируем «data». Необходимо обратить внимание на строку «session», где нужно передать наш номер сессии. Номер берем из ответа сервера.

url_change_nick = 'https://api.ivi.ru/mobileapi/user/info/v5/'
session_id = response.json()['result']['session'] data =
response = session.post(url_change_nick, data=data)

Чтобы удостовериться в работе нашего кода обновляем страницу в браузере.

Наш код успешно сработал.

Использование учетных данных WINDOWS

Также бывают редкие случаи, когда нужно использовать логин-пароль от учетной записи Windows. Для этого можно использовать библиотеку «requests-negotiate-sspi». Она становится особенно полезной, когда часто меняется пароль от учетной записи.

Устанавливаем и импортируем библиотеку, нам нужен метод «HttpNegotiateAuth»

pip install requests_negotiate_sspi from requests_negotiate_sspi import HttpNegotiateAuth 

Повторяем все, что делали выше: прописываем «headers», заполняем «data» и поднимаем сессию. Попробуем получить дату и время сервера.

Вначале сделаем запрос без передачи данных авторизации

xml_request = '''     ''' headers = < 'Host': host_name, 'Content-Type': 'text/xml; charset=utf-8', 'Content-Length': str(len(xml_request)) >session.headers = headers 
response = session.post('http://' + host_name + '/ServerService.asmx?WSDL', data=xml_request) response 

Посмотрим текст ответа

response.text
401 - Unauthorized: Access is denied due to invalid credentials.

Как мы видим ошибка авторизации.

Повторяем запрос с использованием «HttpNegotiateAuth»

response = session.post('http://' + host_name + '/ServerService.asmx?WSDL', auth=HttpNegotiateAuth(), data=xml_request) response.text 
44298.576980902777

Ответ на запрос даты и времени сервера получен успешно.

Sessions позволяет вам использовать requests более эффективно и решать проблемы с подключением к аккаунту, ускорять работу выполнения запросов и исключать блокировку при ограничении количества соединений.

Парсинг данных с сайта с авторизацией на Python

Здравствуйте! Я новичок, пишу курсовую и пытаюсь сделать парсер на Python для сайта на котором нужно заполнить форму что бы получить данные. Пытался по разному написать сам код, проверял данные, сверялся с видеоуроками и просто информацией из интернета но так и не смог понять в чем проблема.

Код парсера у меня следующий:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
import requests from bs4 import BeautifulSoup as BS s= requests.Session() user_agent= "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Mobile Safari/537.36" header={ "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9", "User-Agent": user_agent } payload={ "faculty": '1001', "teacher": "", "group": "45Бд-ПОцфт", "sdate": '01.09.2021', "edate": "31.01.2022", "n": "700" } answ=s.post("https://dekanat.zu.edu.ua/cgi-bin/timetable.cgi?n=700", headers=header, data=payload) answ_bs=BS(answ.content, "html.parser") a= answ_bs.find(".col-md-6") print(a)

В качестве ответа приходит None или [ ].
Не понимаю где я ошибаюсь, прошу укажите на это и помогите решить проблему.

Как парсить авторизованно. python3, bs4, requests ⁠ ⁠

Работу и принцип парсинга я подробно описываю в видео, здесь же акцентирую именно авторизацию.

Для авторизации нужно из кода отправить запрос на тот же url, на который отправляется запрос, если пытаться залогиниться в браузере.

при попытке зайти на пикабу, во вкладке network появляется post запрос auth.php на адрес https://pikabu.ru/ajax/auth.php . Именно этот адрес нужно указывать в session, а сам session используется для того, что не просто авторизоваться, а выполнять все последующие запросы уже будучи авторизованным т.е. через session.post .

Как парсить авторизованно. python3, bs4, requests Парсер, Python, Программирование, Обучение, Видео, Длиннопост

Здесь же можно увидеть form data, данные, которые необходимы для успешной авторизации. Тут увы, прикручена капча, поэтому обойти её простыми путями не получится.

Но на большинстве сайтов, чаще всего требуется formdata =

Как парсить авторизованно. python3, bs4, requests Парсер, Python, Программирование, Обучение, Видео, Длиннопост

сам же запрос на авторизацию выглядит так:

responce = session.post (link, data=data, headers=header).text

где, link — адрес пост запроса во вкладке нетворк.

data — данные form data в этом запросе (в хроме в самом низу)

headers — заголовки запроса (часто хватает user-agent)

После успешной авторизации остальные запросы выполняются так

r = session.get(url, headers=header, params=params)

POST — для отдачи инфы на сервер.

GET — чтобы получить инфу С сервера.

Почему я советую написать парсер после калькулятора. Здесь сразу можно познакомиться с функциями, типами данных, пост/гет запросами. И самое главное, скорее всего у вас будет возникать куча различных ошибок в терминале. Поиск причин и исправление этих ошибок это основа для перестроения мышления. Ведь самое главное в данной сфере, уметь искать информацию.

2 года назад

Этот парсер будет работать лучше «поисковой эласты Пикабу»?

раскрыть ветку
2 года назад

Так вот немножко в этом и проблема, есть варианты обработать с капчу?

раскрыть ветку
Похожие посты
8 дней назад

Ответ на пост «Как я стал программистом в 32 года. Отработал 1 год. Стоит ли оно того?»⁠ ⁠

Короткий рассказ.

Скорее нет, особенно вначале.

Можно ли получать удовольствие?

Изменяется ли личность?

Да, но у всех по-своему. Иногда это пугает.

Это спокойная работа?

Нифига, нервы нужны крепкие.

Про общение с неприятными людьми можно забыть?

И опять нет, вам хватит руководителей, а заказчики ещё та песня.

Можно ли работать на удаленке?

100% , если вы готовы.

Новые друзья и крутая тусовка прилагаются?

Зависит от выбора компании и отдела в ней.

А что тогда в этом хорошего?

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

Длинный рассказ.

Я тоже только в 32 стал прогать на работе.

Но не так жестоко было всё. Не с нуля, не из менеджерской роли.

Образование социологическое, диплом по количественным методам. На красную пятёрку. Правда, когда спустя лет 8 я связался с профессором социологии из Урбане-Шампейне, на чьей статье я развивал тему, оказалось, что мой подход был почти полностью калом, с его точки зрения.

А, ну ещё в школе еле вытянул факультатив на бейсике. Вообще с логикой проблемы были лет до 30-35.

6 лет аналитиком данных (эксель), SPSS. И другие статистические пакеты с графическим интерфейсом. Прокачивал скорее матчасть в области анализа, нежели чистую техничку.

Понадобились макросы. Открыл IDE в экселе и прямо такое приятное чувство испытал, когда за долбанными таблицами скрывается ЯП и море возможностей. Visual Basic, если что. Через месяц я написал аж программу, которая прогнозирует продажи и даже общается с 1С.

Потом понадобилось сделать такую штуку для маркетинга, как ассоциированные продажи. Установил R. Про их IDE понятия тогда не имел. Научился в командной строке делать моделирование (a priori). Получилось.

Параллельно прошёл бесплатный курс по SQL , базовые вещи. Начал слегка шурупить в реляционных базах.

На работе застой с повышениями. Плюс антикризисное управление. А у меня кредит большой. Через хаха получил приглашение на мидла статистика. Три вечера читал про проверки гипотез. Собес прошёл. Дали тогда 90 на руки, это 2014 был. Это было не больше, чем я получал. И в карьере бывал и старшим и руководителем группы. Короче, дауншифтнулся конкретно, лишь бы из маркетинговых исследований и анализа свалить.

Сил в 30 лет дофига ещё.

На новой работе начал фигачить нормальную взрослую статистику. Rstudio, и много сложных запросов. Самый прикол — без хороших коллег профессиональный рост очень медленный. Мне дядька у соседнего компа пару раз подсказал по БД и реально как лампочка зажглась в голове.

Потом подняли до старшего, ЗП 115 или 120. Было покомфортнее. Через три года я ушёл по личным причинам плюс менеджеры подпалили мне седло, да и однообразие задач стало добивать просто нереально. Но писал запросы я уже с нормальной оптимизацией.

На новой работе был мидлом с зп 200. Прошёл курс Advanced R (а на ступеньку ниже уже давно прошёл). Курсы от C. a. Там был сложный проект, который я взялся писать на R. За почти полтора года где-то 10-12 тыщ строк. Ушёл по . личным причинам. К меня ещё с эмоциальной стабильностью не всё отлично.

Потом ещё переход на другую работу, там уже были 220 ЗП. Задачи разные, интересные, много исследований. Подключил Python. Ушёл с — бее — Винды и плюсовой среды версионирования на линукс. Наигрался в машинное обучение, глубокие сети. Большие данные немного.

И тут я подзастрял в своей ракушке комфорта. Ну и уже на Python уровень мидла сделал. И 8 лет на R, сениористость детектед.

Выгораний было дофига. В моём случае, в основном, от общения с манагерами. Переход на полную удаленку сделал меня хуже. Хотя через пару лет стало привычно. Как теперь ежедневно бежать в офис на какой-то дейлик я ХЗ!

Не жалею, что ушёл из экселя и маркетинга, там душновато прямо бывало. И ещё раз. Нужны полезные люди вокруг. Меня предупреждали, что в ИТ зае. Ну вы поняли, от однообразных задач. Потом эту же теорию высказал один эксперт: он свалил в Европы за интересной работой, и уже оттуда ныл, что всё уже видел и опять то же самое и тд.

И я вас предупреждаю об этом. А ещё о том, что учить новое надо будет постоянно, если хотите карьерной мобильности. А если вы не гений, то удовольствие от новых вещей вы начнёте получать совсем не сразу а фрустрацию — как раз сразу. А если ещё лид попадётся, повёрнутый на «модненьких штучках», вы будете страдать.

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

Показать полностью
Поддержать
9 дней назад

Как я стал программистом в 32 года. Отработал 1 год. Стоит ли оно того?⁠ ⁠

Ровно год назад в возрасте 32 лет я получил свой первый оффер и устроился в IT-компанию на должность Junior-разработчика на языке Java, где отработал 3 недели, после чего уволился. Это не история успеха, после которой будут ссылки на какие-либо курсы, это всего-лишь личный опыт человека (то есть меня), который до 32 лет работал инженером в строительной области, но в один момент решивший изменить если не всё, то точно существенную часть своей жизни.

Ранее я подробно рассказывал о том каким был мой путь: как возникли мысли стать программистом в 30+ лет, как и где я учился, а также сколько времени ушло на обучение и насколько сложно было найти первую работу. Если очень кратко, то вот основные тезисы из прошлых постов:

  • Бэкграунд в программировании: ноль, но в плане ПК я продвинутый юзер, то есть могу переустановить винду, найти и установить драйвера и вот это вот всё.
  • Учился я под присмотром ментора.
  • Теорию смотрел на YouTube, либо в дешевых курсах с площадки на букву U.
  • Закреплял знания на практике, выполняя небольшие пет-проекты, задания к которым мне выдавал ментор. Если кому-то интересно, то могу скинуть ссылку на задания в комментариях.
  • На учебу ушло 7,5 месяцев или 1000 часов обучения.
  • У меня была накоплена финансовая подушка, которая позволила полностью отказаться от основной работы и бросить все силы на обучение.
  • Сделал 700 откликов на hh, прежде чем получил первое приглашение на работу.

Если не лень читать подробные посты на эти темы, то оставлю ссылки ниже:

  • Как я стал разработчиком с нуля в 32 года
  • Про первую работу джуном и первое увольнение спустя 3 недели

Так уж получилось, что первая работа оказалось абсолютно не тем, чего я ожидал от работы в новой для себя IT-сфере: легаси-проект, максимально бесполезные (с точки зрения профессионального развития) задачи, а также зарплата, на которую невозможно было прокормить семью. Но мне повезло: спустя 3 недели после того, как я попал на свою первую работу, мне написала HR с другой компании и пригласила на собеседование. Проект на свежих технологиях, зарплата почти в 2 раза выше. И да, меня взяли.

Абсолютно без всяких сожалений я написал заявление «по собственному» и ушел одним днем. Помню, как рядом сидящий джун (студент) мне говорил: «Ну и зря ты увольняешься. Где ты ещё без опыта найдешь работу начинающим разработчиком, так ещё и на такую нормальную зарплату». Согласен, для студента, который живет с родителями, 45000р — это может и нормальная зарплата, но не для семейного человека, за плечами которого жена в декрете, маленький ребенок и съемная квартира.

Итак, я ушел в другую компанию. На новом месте меня всё более чем устраивало: приятный и дружелюбный коллектив, проект с нормально написанным (на первый взгляд) кодом, адекватные моему уровню задачи и зарплата, на которую уже можно хоть как-то жить.

Я попросил читателей моего небольшого блога накидать мне в комментариях вопросов, которые их интересуют, ведь мне есть чем поделиться. Перед началом обучения, да и в процессе обучения я сам искал подобные статьи, так как было безумно интересно узнать: а как оно всё на самом деле в этом вашем IT, так ли всё круто, как нам рисуют маркетологи различных IT-курсов, как проходит день разработчика и реально ли работать на берегу океана с макбуком на коленях? Кстати, идея работать на берегу океана — это отстой на мой взгляд, какая бы это работа ни была. А теперь отвечу на вопросы читателей, разбив их на 3 блока: обучение, работа, общие вопросы.

== Про работу ==

Среди коллег есть те, кто вошел в эту профессию в возрасте 35+ или даже 40+ ?

Как ты себя ощущал в первые дни на работе?

В принципе на любой новой работе мне в первые несколько недель всегда не очень комфортно. Но если раньше это было в большей степени связано с новым коллективом, то здесь новым было практически всё. Когда мне дали первую задачу, я смотрел в экран монитора и вообще не понимал что от меня требуется, что происходит в этом коде и как сформулировать вопрос, чтобы меня не посчитали совсем уж тупым. Я работал в офисе и ежедневно по утрам проводились встречи (которые называют дэйликами), где каждый член команды рассказывал над чем работает в данный момент и какие есть проблемы. Для меня это было максимально стрессовое время, так как мне было непонятно абсолютно всё, но как задать конструктивный вопрос я не знал, поэтому был немногословен.

Расскажи про рабочий процесс: как получаешь задачи, от кого, как и перед кем отчитываешься, несколько примеров своих задач, состав команды?

В первые дни на первой работе мне дали ссылку на репозиторий, чтобы я ознакомился с проектом. Я смотрел на громадные классы со сложной бизнес-логикой, знакомился с БД, смотрел какие таблицы там есть, связи между ними. Первой задачей было найти и устранить баг: было задвоение информации в базе данных. Нужно было SQL-командой удалить задвоенную информацию. Кстати, на первой работе, где я отработал 3 недели — я не написал ни одной строчки кода, соответственно не сделал ни одного коммита. Всё задачи были связаны с БД.

На своей текущей работе задачи получаю из бэклога или тех.долга в Jira. После завершения задачи происходит код-ревью другим разработчиком (все ревьюят друг друга), после чего задача переходит в стадию тестирования. Каждый отчитывается о статусе своих задач на ежедневном созвоне. В команде 3 бэкенд-разработчика (один из них Senior, другой выполняет роль архитектора), 3 тестировщика, 1 проект-менеджер.

Примеры задач: отпилить от монолита часть логики и сделать отдельный микросервис, настроить логирование в нужном формате, настроить трейсинг, написать микросервис, который по расписанию будет забирать данные из БД, отправлять на сторонний API, получать данные и записывать в БД, привести в соответствие swagger и документацию в Confluence, покрыть код unit и интеграционными тестами. На прошлой работе писал ci/cd пайплайны для сборки образов и деплоя.

На второй работе в числе первых задач нужно было написать Kafka-продюсеры и консюмеры с несложной логикой обработки сообщений, а также изменить поля у DTO-моделей.

Была ли помощь более опытных коллег?

В первые дни на любой из работ я всегда спрашивал кого я могу спрашивать по проекту. Это нормально, особенно в первое время. Я всегда, когда это было необходимо, получал помощь или как минимум совет от более опытных товарищей. Старался спрашивать вопросы именно по самому проекту и его логике, а не по техническим моментам, которые можно легко загуглить, типа: «как переключиться на другую git-ветку».

Было ли разочарование из категории «ожидания — реальность». Когда работа на деле оказывается не настолько интересной, как кажется в начале пути?

Многое зависит от проекта и команды. Было разочарование, когда я попал на первую работу на легаси-проект с ужасным кодом. Но что касается второго и третьего места работы, то реальность совпала с ожиданиями. Работа над пет-проектами, как оказалось, была максимально похожа на реальную работу. Только всё на порядок сложнее, но это компенсируется зарплатой, а также возможностью обсудить проблему с коллегами. Ощущение, что я продолжаю обучаться, но теперь за это ещё и платят. В общем разочарования нет, работаю по большей части в удовольствие, но тот самый первый восторг от работы программистом уже ушел, привык что ли.

Расскажи какие трудности были на работе или они есть до сих пор?

Я бы не назвал это трудностью, скорее специфика отрасли — постоянно приходится изучать что-то новое, гуглить или спрашивать Chat GPT. На новом (уже третьем) месте работы практически каждая новая задача требует от меня того, чтобы я посмотрел часовой урок/доклад на YouTube или хотя бы прочитал статью на эту тему. В начале меня пугала эта неизвестность, сейчас это уже норма. Я больше начинаю переживать, если задачи закрываются, а я не узнаю при этом ничего нового себя, ведь это никак не способствует росту и, соответственно, повышению зарплаты. Собственно именно поэтому я ушел со второго места работы, так как было однообразное перекладывание json’ов и crud-операции.

Как происходило вливание в коллектив?

Я успел поработать как в офисе, так и удаленно. Мне было комфортно начинать работу в офисе, когда видишь коллег вживую и можешь пойти поболтать с ними на кухне за кружкой чая. А вот начинать работу в коллективе, когда слышишь только голоса (созвоны без камер) лично мне менее комфортно, но со временем привыкаешь и создается впечатления, что знаком с человеком лично. С одним из коллег договорились встретиться через пару недель, он приезжает отдыхать в город, где я живу.

Я не скрываю того факта, что стал разработчиком относительно недавно, все абсолютно нормально к этому относятся (даже на этапе собеседований). Никаких ущемлений не заметил. Более того на прошлой работе есть несколько людей, кто пришел в разработку в 35, 37 и даже в 40+ лет.

Что ожидает новичков, о чем мы не догадываемся и чему нам стоит больше уделять внимания? Насколько начал расти скилл и начал ли вообще расти?

Возможно, ожидают скучные, неинтересные и однотипные задачи. Повторюсь, зависит от проекта. Но когда ищешь первую работу, выбирать не приходится, обычно соглашаешься на первое предложение.

На счёт роста скиллов: пет-проекты – это, конечно, хорошо, но только на реальной работе можно столкнуться с проблемами высоконагруженных приложений и большого объема данных. Естественно, в процессе решения таких проблем растет скилл, а также скилл работы в команде, ведь приходится взаимодействовать с другими разработчиками, аналитиками, тестировщиками, инженерами devops.

Интересно было бы узнать какой уровень разработчиков, которые встретились вам на работе, насколько им вообще интересно расти, повышать ЗП, менять должности, насколько они активны?

Джуны, миддлы, сеньоры, архитекторы. Встретил только одного парня, который активно проходил собесы и в итоге ушел в другое место с повышением ЗП в 2 раза. Основная масса коллег — работает на одном месте годами с небольшой индексацией ЗП каждый год. Как сказал мне один из коллег: «Для меня прохождение собеседований — это выход из зоны комфорта. Тут я всё знаю, коллектив устраивает, а что будет в другом месте? Вдруг там всё плохо, что прибавка к ЗП не компенсирует этого?».

Отличался ли стек в вакансии, от стека на работе, по вашему опыту?

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

Как растет понимание процессов, технологий после того, как устроились на работу, в сравнении с обучением или возможно наступает однообразие и роста нет?

Год назад ничего не знал о процессах, сейчас общее понимание присутствует в контексте всего цикла жизни проекта: анализ, планирование, разработка, тестирование, развертывание, поддержка. За 10 месяцев работы наступило некоторое однообразие в плане задач и остановка активного развития, что сподвигло меня на смену компании и даже языка программирования (Java -> Kotlin).

Какие ощущения после года работы? Считаете ли вы, что смогли достаточно узнать, чтобы закрепиться плотно в этой сфере и теперь уверенно развиваться вперёд, не боясь конкуренции по сравнению с теми, кто заканчивает институты по этой вакансии?

Определенно появилась некоторая уверенность в своих силах. Многого не знаю, но как показывает опыт — во всем можно разобраться, ведь в интернете в любом случае уже кто-то решал подобную или похожую проблему. Периодически пишут HR с предложениями пройти собеседование, иногда соглашаюсь и прохожу для опыта.

== Про обучение ==

Как считаете, ваш опыт работы инженером как-то повлиял на скорость обучения Java-разработке?

Безусловно повлиял. Инженерный склад ума, дружба с математикой, любовь к различного рода логическим задачкам, а также прошлая инженерная деятельность позволили в достаточно сжатые сроки освоить необходимый материал для трудоустройства. Но у меня есть знакомый (37 лет), который был максимально далек от математики, компьютеров и был скорее гуманитарием, а не технарем, но он также, как и я, прошел этот путь, просто это заняло в два раза больше времени.

Что бы ты посоветовал знать 100% перед первой работой?

Всё, что обычно указывают в вакансиях. Для Java-стека это: собственно сама Java (можно не углубляться в многопоточку, но всё остальное знать обязательно), SQL, Hibernate, Spring, Docker, Git, Maven (или Gradle). Чтобы выглядеть лучше большинства новичков стоит познакомиться хотя бы с одним из брокеров сообщений и микросервисной архитектурой.

== Общие вопросы ==

Насколько сложнее (проще) работать разработчиком по сравнению с твоей предыдущей работой?

До того как я перешел в разработчики, я работал инженером производственно-технического отдела. С технической точки зрения программирование, конечно, на порядок сложнее. Но с точки зрения условий работы, психологического комфорта и удовлетворенности — старая сфера деятельности сильно уступает.

Так ли там хорошо, как кажется со стороны?

Комфортные условия труда, зарплата, возможность удаленной работы, различные «плюшки» в виде ДМС, оплаты обучения и спорта — всё это имеется в большинстве крупных компаний. Не могу предугадать что представляют себе о подобной деятельности другие люди, но мои ожидания оправдались. Многое, конечно, зависит от компании, коллектива и проекта, поэтому вполне возможно, что кому-то повезет меньше или наоборот — больше.

Если бы финансовая подушка закончилась, а вы были бы не готовы начинать работать, что бы вы сделали?

До перехода в IT я был самозанятым инженером ПТО и имел подработку в виде репетиторства, то есть я имел возможность брать заказы и работать в удобном для себя графике. Если бы финансовая подушка закончилась, то, скорее всего, возобновил бы поиск заказов по старой деятельности и репетиторству, но не прерывал бы обучение.

Нравится ли вам IT профессия? Или уровень заработка все же на первом месте? Не думаете ли уйти в frontend или стать full-stack разработчиком?

Пока нравится. Если бы платили одинаково в строительной сфере и в IT, то с высоты своего опыта всё равно выбрал бы разработку. Frontend абсолютно никак не привлекает и ещё в процессе написания пет-проектов и работы над визуальной частью, я четко понял, что это не мое.

Насколько большая разница между Junior и Middle разработчиком?

Зависит от компании. Мое мнение: если прошел собес на Middle-разработчика, получаешь зарплату как Middle-разработчик, значит ты и есть Middle-разработчик)

Какие планы на будущее: очень рады, что так все получилось и уверены, что теперь нашли то, что искали или не так все однозначно, иногда подумываете между тем, стоило оно того или нет?

За свои 33 года я перепробовал достаточно много профессий и работ: официант, крупье в казино, инженер-проектировщик, инженер ПТО, риелтор, репетитор, пробовал открывать небольшой бизнес на набережной, открывал интернет-магазин настольных игр, пробовал вести бизнес с партнером и вот теперь я пишу код. Как я говорил ранее, на данный момент всё нравится, ожидания оправдались и искать что-то новое пока не тянет. Возможно, через 5-10 лет найду что-то более интересное для себя.

Удаётся ли соблюдать пресловутый work-life balance? Сколько часов в день вы выделяете на саморазвитие помимо работы?

До недавнего времени удавалось и всё было достаточно «лайтово». Как только устроился в новую компанию, где незнакомый для меня стек технологий, баланс немного нарушился, так как приходится даже после работы смотреть различные курсы и читать статьи. Может быть 2-3 раза в неделю уделяю по 1-2 часа на обучение.

Как справляешься с синдромом «самозванца»?

Глядя на чужой код или слушая коллег на созвонах, я очень часто ловлю себя на мысли, что я многого не знаю или не смог бы написать такой красивый с архитектурной точки зрения код. Иногда мне кажется, что я очень долго сижу над задачей и что другой разработчик справился бы гораздо быстрее меня. Как только синдром самозванца начинает мешать мне жить, я запрашиваю обратную связь о своей работе у тех людей, кто ставит и проверяет мои задачи. И во всех случаях (даже на той работе, где я отработал всего 3 недели) мне говорили: «Всё ок, быстро схватываешь». Также стараюсь перестать сравнивать себя с другими разработчиками, но пока не очень получается.

== Заключение ==

В заключении хочется сказать, что IT точно не для всех. И я сейчас не про умственные способности, а скорее про склад характера, усидчивость, любовь в решению логических задачек. Меня увлекло программирование на начальном этапе обучения и не было такого, что я что-то делал через силу. Наоборот, мне всегда хотелось побыстрее прийти домой, сесть за комп, ведь в голову пришла идея как можно реализовать вон ту штуку в пет-проекте или как решить алгоритмическую задачу. Поэтому сейчас я не испытываю проблем с тем, что мне «не хочется идти на работу».

Но большинство людей из моего окружения считает это невероятно скучным занятием и даже ради относительно высокой зарплаты никто не готов потратить около 1000 часов на обучение, после чего возникнет проблема с поиском первой работы. И их можно понять, зачем менять свою сферу деятельности, где ты уже профи на что-то непонятное и, возможно, неинтересное для тебя? Но если вам это нравится, то никогда не поздно. И моя история – далеко не единственное подтверждение этому.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *