Как я автоматизировал поиск работы, создав веб-сканер с нуля

1656612865 kak ya avtomatiziroval poisk raboty sozdav veb skaner s nulya

История о том, как это началось

В пятницу была в полночь, мои друзья хорошо проводили время, но я был прибит к экрану компьютера и печатал.

Как ни странно, я не чувствовал себя брошенным.

Я работал над чем-то, что считал действительно интересным и замечательным.

Я сразу окончил колледж, и мне нужна была работа. Когда я выехал в Сиэтл, у меня был рюкзак, полный учебников колледжа и немного одежды. Я мог поместить все, что у меня было, в багажник моей Honda Civic 2002 года выпуска.

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

Начало работы с Craigslist

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

8blgV5gKhKM7Y1XtRALuFLDM1Gwref00CSLs
Craigslist

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

Я был совсем «новичок».

Тем не менее, я всегда слышал об этом новом «горячем» языке программирования под названием Python. Я мало знал Python, но хотел испачкать руки и узнать о нем больше.

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

xsXLiP4vQtB4idFgLrFFFmYsMonJHAzY2nrE

Путешествие к созданию (рабочему) прототипу

У меня был ноутбук BenQ, который мой брат подарил мне, когда я пошел в колледж, который я использовал для разработки.

Это была не лучшая среда для разработки. Я использовал Python 2.4 и более старую версию Sublime text, но процесс написания программы с нуля был действительно увлекательным опытом.

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

Я просмотрел Craigslist, чтобы узнать, есть ли у них общедоступный REST API. К моему ужасу, они этого не сделали.

Однако я нашел следующая самая лучшая вещь.

У Craigslist был канал RSS, который был общедоступн для личного пользования. RSS-канал, по сути, есть a читаемый компьютером резюме обновлений, которые посылает веб-сайт. В этом случае RSS-канал позволит получать новые списки вакансий, когда они были опубликованы. Это было идеальный для моих нужд.

2i0Kuh464TY2icrXndbP8YA91H3LEXCSh6YH
Пример того, как выглядит RSS-канал

Дальше мне нужен был способ читать эти RSS-каналы. Я не хотел просматривать RSS-каналы вручную, потому что это было бы поглощением времени, и это не отличалось бы от просмотра Craigslist.

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

После небольшого поиска в Google я нашел эту полезную публикацию на StackOverflow, где описано, как искать через RSS-канал Craiglist. Это была своего рода функция фильтрации, которую Craigslist предоставил бесплатно. Все, что мне нужно было сделать, это передать конкретный параметр запроса с интересующим меня ключевым словом.

Я был сосредоточен на поиске работы, связанной с программным обеспечением в Сиэтле. После этого я ввел этот конкретный URL-адрес, чтобы искать списки в Сиэтле, содержащие ключевое слово «программное обеспечение».

https://seattle.craigslist.org/search/sss?format=rss&query=software

И вуаля! Это сработало красиво.

ygmbnQQRIoY4p7hY8MJmrgXIZcKvBT6nkbAj
Пример RSS-канала для Сиэтла с программным обеспечением в названии

Самый красивый суп, который я когда-либо пробовал

Однако я не был уверен, что мой подход сработает.

Во-первых, количество списков было ограничено. Мои данные не содержали все доступные объявления о работе в Сиэтле. Возвращенные результаты были лишь подмножеством целого. Я хотел забросить как можно более широкую сеть, поэтому мне нужно было знать все доступные списки вакансии.

Во-вторых, я понял, что RSS-канал не включал никакой контактной информации. Это был облом. Я мог найти списки, но я не мог связаться с плакатами, если вручную не отфильтровал эти списки.

k-Rk7q-1b8bSgOqcNodm7xMMvbxNbYkRw75z
Снимок экрана ссылка на ответ Craigslist

У меня много навыков и интересов, но повторяющаяся ручная работа не одна из них. Я мог бы нанять кого-нибудь, чтобы сделать это за меня, но я едва пробирался с лапшой рамэн за 1 доллар. Я не мог тратить деньги на этот побочный проект.

Это был тупик. Но это не было в конец.

Непрерывная итерация

С моей первой неудачной попытки я узнал, что у Craigslist есть RSS-канал, по которому я могу отфильтровать, и каждая публикация содержит ссылку на саму публикацию.

Ну, если бы я мог получить доступ к фактической публикации, может быть, я мог бы сорвать с нее адрес электронной почты? ? Это означало, что мне требовалось найти способ получить электронные адреса из оригинальных публикаций.

Снова я нашел свой надежный Google и искал способы разбора веб-сайта.

Немного погугнув, я нашел классный маленький инструмент Python под названием Beautiful Soup. По сути, это отличный инструмент, который позволяет анализировать целое дерево DOM и помогает понять, как структурирована веб-страница.

Мои потребности были просты: мне нужен был простой в использовании инструмент, позволяющий собирать данные с веб-страницы. BeautifulSoup поставил отметки в обоих флажках и вместо того, чтобы тратить больше времени на выбор лучший инструментя выбрал инструмент, который работал, и пошел дальше. Вот список альтернатив, делающих нечто подобное.

-KvuqnYZ0chIKSyEuBZhJyqdhDz36xCFcQeY
Главная страница BeautifulSoup

Примечание: я нашел этот удивительный учебник, рассказывающий о том, как очищать веб-сайты с помощью Python и BeautifulSoup. Если вам интересно узнать, как скрести, то я рекомендую прочитать это.

С этим новым инструментом мой рабочий процесс был сконфигурирован.

VEYEIzhRPaaR21nH5IKSYy6Peza95XD0OlEr
Мой рабочий процесс

Теперь я был готов взяться за следующее задание: извлечь адреса электронной почты из фактических публикаций.

Теперь вот самое интересное о технологиях с открытым кодом. Они бесплатны и работают отлично! Это как получить бесплатное мороженое в жаркий летний день, и свежевыпеченное печенье с шоколадной стружкой.

BeautifulSoup позволяет искать определенные HTML-теги или маркеры на веб-странице. И Craigslist структурировал свои списки таким образом, чтобы легко было найти адреса электронной почты. Тег был чем-то вроде «email-reply-link», который в основном указывает на то, что ссылка электронной почты доступна.

С тех пор все было легко. Я полагался на встроенную функциональность, предоставляемую BeautifulSoup, и с помощью всего лишь некоторых простых манипуляций я смог довольно легко выбрать адреса электронной почты из публикаций Craigslist.

Составление вещей

В течение часа или около того я получил свой первый MVP. Я создал веб-скрепер, который мог собирать адреса электронной почты и отвечать людям, которые ищут инженеров-программистов в радиусе 100 миль от Сиэтла.

mTnFGw-linWi0nN4uWoCgQ7TLJ8n0OkZ9-tX
Скриншот кода

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

Конечно, не хватало многих других заметных функций, таких как:

  • возможность регистрировать адреса электронной почты, которые я прислал
  • правила усталости, чтобы предотвратить чрезмерную отправку электронных писем людям, с которыми я уже обращался
  • особые случаи, такие как некоторые электронные письма, требующие Captcha, прежде чем они отображаются, чтобы предотвратить автоматические боты (которыми я был)
  • Craigslist не разрешал скреперы на своей платформе, поэтому меня забанили, если я запускал сценарий слишком часто. (Я пытался переключаться между разными VPN, чтобы попытаться «обмануть» Craigslist, но это не сработало), и
  • Я все еще не мог получить все публикации на Craigslist

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

Весь опыт походил на игру в тетрис. Я знал, какова моя конечная цель, и моей истинной проблемой было собрать правильные части вместе, чтобы добиться этой конкретной конечной цели. Каждый кусочек головоломки привел меня в другое путешествие. Это было сложно, но, тем не менее, приятно, и я узнавал что-то новое на каждом шагу.

Изученные уроки

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

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

Оглядываясь назад, моя проблема заключалась в следующем: как я могу использовать этот отличный каталог в Интернете, чтобы быстро охватить людей с определенными интересами? На тот момент для меня не было известных продуктов или решений, поэтому я разбил это на несколько частей:

  1. Найдите все объявления на платформе
  2. Собирайте контактную информацию по каждому списку
  3. Отправьте им электронное письмо, если контактная информация существует

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

Направления усовершенствования

Было много сфер, в которых я мог бы улучшить:

  • Я выбрал язык, с которым не был хорошо знаком, чтобы начать, и поначалу было очень тяжело. Это было не слишком ужасно, потому что Python очень легко подобрать. Я настоятельно рекомендую всем начинающим энтузиастам программного обеспечения использовать это как первый язык.
  • Очень полагаясь на технологии с открытым кодом. Программное обеспечение с открытым кодом имеет собственный набор проблем, также Я использовал несколько библиотек, которые больше не разрабатывались, поэтому сначала я столкнулся с проблемами. Я не мог импортировать библиотеку, иначе библиотека выйдет из строя по, казалось бы, безвредным причинам.
  • Разрешать проект самостоятельно может быть весело, но также может вызвать сильный стресс. Вам нужен большой импульс, чтобы отправить что-нибудь. Этот проект был быстрым и простым, но мне понадобилось несколько выходных, чтобы прибавить улучшение. По мере реализации проекта, я начал терять мотивацию и импульс. После того как я нашел работу, я полностью отказался от проекта.

Ресурсы и инструменты, которые я использовал

The Hitchhiker’s Guide to Python — отличная книга для изучения Python в целом. Я рекомендую Python как первый язык программирования для начинающих, и я рассказываю о том, как я использовал его для получения предложений от нескольких ведущих компаний в своей статье.

DailyCodingProblem: это служба, которая ежедневно отправляет проблемы с кодировкой на вашу электронную почту и имеет некоторые из последних проблем программирования от ведущих технологических компаний. Используйте мой код купона, zhiachong, чтобы получить скидку 10 долларов!

BeautifulSoup – отличный вспомогательный инструмент, который я использовал для создания своего веб-сканера

Веб-скрейпинг с помощью Python – полезное руководство по изучению того, как работает веб-скрейпинг с помощью Python.

Lean Startup – я узнал о быстром создании прототипов и создании MVP для проверки идеи из этой книги. Я думаю, что приведенные здесь идеи применимы во многих разных областях, а также помогли мне завершить проект.

Evernote – я использовал Evernote, чтобы собрать свои мнения для этой публикации. Очень рекомендую — я использую это в основном для всего, что делаю.

Мой ноутбук – это мой текущий домашний ноутбук, настроенный как рабочая станция. это много, намного легче для работы, чем со старым ноутбуком BenQ, но оба будут работать только для общей работы по программированию.

Кредиты:

Брендону О’Брайену, моему наставнику и хорошему другу, за чтение и предоставление ценного отзыва о том, как улучшить эту статью.

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

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

Чжиа Чонг – инженер-программист в Twitter. Он работает в команде Ads Measurement в Сиэтле, измеряя влияние рекламы и рентабельность инвестиций для рекламодателей. Команда есть наем!

Вы можете найти его на Twitter и LinkedIn.

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

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