Андрей Лебедев – Python для цифрового поиска. 21 шаг от рутины к системе (страница 1)
Андрей Лебедев
Python для цифрового поиска. 21 шаг от рутины к системе
Введение
Я написал эту книгу для человека, который уже понял одну простую вещь: в открытых расследованиях больше всего сил съедает не сложность, а повторение. Вы ищете одни и те же следы, открываете десятки вкладок, переносите ссылки, копируете фрагменты текста, проверяете один и тот же никнейм на разных площадках и к концу дня чувствуете не удовлетворение, а усталость. Самое неприятное в этом не объем работы, а ощущение, что значительная часть Вашего времени уходит не на мысль, а на механическое действие. В какой-то момент становится ясно, что без автоматизации Вы будете либо двигаться слишком медленно, либо начнете упускать важные детали. Именно здесь Python перестает быть чем-то из мира программистов и становится рабочим инструментом исследователя.
Сразу скажу, чего здесь не будет. Я не собираюсь делать из Вас разработчика, который готовится к собеседованиям, пишет большие командные проекты и спорит о чистоте архитектуры. Для этого есть другие книги, другие курсы и другой темп. Здесь мы идем от реальной практики, где Вам нужно быстро понять, как заставить компьютер делать рутину за Вас. Поэтому я буду объяснять только то, что дает ощутимую пользу в расследованиях: как запускать чужие инструменты, как отправлять запросы, как сохранять результаты, как вытаскивать нужные поля, как проверять много файлов сразу и как собирать из данных понятный итог.
Возможно, у Вас уже есть внутреннее сопротивление. Вы видели код, терминал, непонятные ошибки, слова вроде API, JSON, WHOIS, CSV, scraping, proxy, и все это могло выглядеть как чужой язык. Это нормальная реакция. Большинство людей пугает не сам Python, а ощущение, что вход в тему слишком высокий и что ошибка сразу докажет их несостоятельность. Но правда в том, что для прикладной работы Вам не нужно понимать все устройство языка заранее. Вам нужно научиться делать маленькие, полезные шаги и связывать их в цепочку.
Я хочу, чтобы с первых страниц Вы смотрели на Python не как на предмет изучения, а как на набор рычагов. Один рычаг помогает быстро запустить готовый инструмент. Другой позволяет взять ответ сервера и достать из него нужные данные. Третий складывает результаты в файл. Четвертый превращает груду строк в таблицу или отчет. Когда эти рычаги соединяются, Вы перестаете вручную повторять одно и то же и начинаете строить собственный процесс. И в этот момент даже очень простой код дает преимущество перед человеком, который делает все только руками.
У этой книги есть важное ограничение, и я считаю честным назвать его сразу. Мы будем часто выбирать не идеальное, а достаточное решение. Иногда это значит, что код можно было бы написать красивее. Иногда это значит, что для большой системы стоило бы действовать иначе. Но в реальной исследовательской работе у Вас часто нет задачи построить безупречный программный продукт. У Вас есть задача за разумное время получить надежный результат, сохранить его и перейти к следующему шагу. Я буду держаться именно этой логики, потому что она ближе к жизни.
Еще один важный момент касается темпа. Я предлагаю Вам воспринимать эту книгу не как забег, а как маршрут. Смысл не в том, чтобы как можно быстрее проглотить весь материал, а в том, чтобы каждый день добавлять по одному рабочему навыку. Сегодня Вы просто запускаете чужой скрипт. Завтра уже понимаете, как устроены переменные, условия и циклы. Потом учитесь брать данные из сети, превращать их в удобный вид, сохранять, фильтровать, объединять, проверять и оформлять. Такой порядок не случаен. Он нужен, чтобы у Вас постепенно возникло чувство опоры: я понимаю, что делаю, зачем делаю и как использовать это в своей задаче.
Если Вы далеки от технической среды, Вам особенно важно не сравнивать себя с людьми, которые уже много лет пишут код. Это чужая дистанция. Ваша задача намного практичнее: сократить ручной труд, уменьшить число ошибок, научиться повторять удачные действия и не зависеть каждый раз от чьей-то помощи. Даже если на старте Вам кажется, что Вы почти ничего не понимаете, это не мешает начать. Я много раз видел, как человек без технического бэкграунда осваивал самые полезные вещи именно потому, что подходил к ним без лишней теории и сразу примерял их к своим задачам.
По ходу книги я буду постоянно возвращать Вас к одному вопросу: что из этого можно применить уже сегодня. Если Вы научились читать JSON, значит, Вы уже можете брать данные из API и не смотреть на них как на хаос. Если Вы поняли, как записывать строки в CSV, значит, Вы уже можете собирать таблицы для дальнейшего анализа. Если Вы освоили регулярные выражения, значит, Вы уже можете вытаскивать из текста адреса, телефоны, домены и другие следы. Каждый такой навык сам по себе не выглядит сенсацией, но вместе они превращаются в систему, которая экономит Вам часы.
Важнее всего здесь не запомнить как можно больше команд, а изменить способ мышления. Когда Вы видите повторяющееся действие, Вы должны все чаще задавать себе не вопрос “сколько раз мне еще это делать”, а вопрос “можно ли поручить это скрипту”. Когда Вы находите полезный сервис, Вы должны думать не только о том, как получить один ответ, но и о том, как встроить его в свой процесс. Когда Вы собираете данные, Вы должны сразу представлять, в каком виде их будет удобно сохранять, проверять и передавать дальше. Этот сдвиг кажется небольшим, но именно он отличает человека, который просто пользуется инструментами, от человека, который строит из них собственную рабочую систему.
Я также хочу предупредить Вас о неизбежных трудностях. У Вас будут ошибки. Иногда не установится пакет. Иногда не запустится скрипт. Иногда сайт ответит не так, как Вы ожидали. Иногда формат данных окажется неудобным. Но все это не признаки того, что Вы не справляетесь. Это и есть нормальная среда, в которой рождается практический навык. Здесь выигрывает не тот, кто никогда не ошибается, а тот, кто умеет спокойно разбирать проблему, проверять шаги и двигаться дальше.
В конце этого пути Вы не станете человеком, который знает про Python все. Но это и не нужно. Намного ценнее другое: Вы начнете понимать, как уменьшать рутину, как быстро собирать и обрабатывать результаты, как проверять гипотезы через код и как превращать разрозненные действия в воспроизводимый процесс. Для исследователя это уже очень серьезное усиление. И если Вы будете двигаться последовательно, то довольно скоро заметите, что компьютер начал работать вместе с Вами, а не просто стоять рядом.
С этого и начнем. Не с громких обещаний, не со сложной теории и не с попытки охватить все сразу. Мы начнем с самого важного: подготовим себе рабочее пространство, снимем первый страх перед запуском кода и сделаем так, чтобы первая маленькая автоматизация сработала у Вас на глазах. Это не самый эффектный момент в книге, но именно он меняет позицию читателя. До него Python кажется чужой территорией. После него он становится инструментом, который уже подчиняется Вам.
Глава 1. Первый порог
Любая автоматизация начинается не с кода, а с внутреннего сопротивления. Обычно человек говорит себе, что сначала надо разобраться в теории, найти идеальную среду, понять все термины, посмотреть несколько обзоров и только потом что-то запускать. На деле это удобный способ отложить реальное действие. Пока Вы готовитесь бесконечно, рутина продолжает съедать время, а ощущение сложности только растет. Поэтому мой совет простой: не пытайтесь победить весь Python сразу, победите первый порог.
Этот порог выглядит очень приземленно. Вам нужно место, где код можно запустить без лишней драмы. Иногда это Ваш компьютер с установленным Python и Git, а иногда браузерная среда, где все уже подготовлено и от Вас требуется только открыть рабочее окно. Я не считаю, что существует один правильный путь для всех. Важно другое: среда должна не впечатлять Вас технической мощью, а позволять быстро дойти до первого результата. Если для этого удобнее облачное решение, значит, на старте оно и будет лучшим.
Здесь у многих возникает первый конфликт. С одной стороны, хочется чувствовать себя уверенно и контролировать процесс. С другой стороны, именно установка и настройка чаще всего выбивают новичка из колеи еще до начала работы. Человек сталкивается с терминалом, версиями, правами доступа, путями к папкам и решает, что вся тема слишком сложная. Но проблема не в том, что Вы неспособны разобраться. Проблема в том, что Вы пытаетесь доказать себе компетентность там, где пока нужна только проходимость.
Поэтому на первом этапе я предлагаю Вам мыслить прагматично. Ваша цель не в том, чтобы создать совершенную рабочую станцию, а в том, чтобы выполнить первое действие: открыть проект, найти нужный файл и запустить его. Этот момент кажется мелочью, но он меняет психологию обучения. Пока Вы только читаете про код, Вы остаетесь наблюдателем. Когда у Вас в окне появляется результат работы скрипта, Вы переходите в другую роль. Теперь Вы уже не смотрите со стороны, а управляете процессом.
Первый запуск всегда важнее, чем кажется. Он нужен не потому, что выводит на экран пару слов, а потому, что показывает простую причинно-следственную связь: я дал команду, система ее поняла, код отработал, я увидел результат. Для человека без технического бэкграунда это сильный момент. Он убирает мистику и возвращает ощущение, что перед Вами не магия, а последовательность понятных шагов. Именно поэтому я считаю первый скрипт не формальностью, а точкой перелома.