Обзор
Однажды моя девушка попросила меня порекомендовать несколько технологических компаний для ее следующей работы. В то время как я больше знаком с работой в области обработки данных/машинного обучения в технологических компаниях, она ищет возможности инженера-программиста с сильным акцентом на программное обеспечение/инженерию. Я изо всех сил старался очистить свои воспоминания о стартапах и крупных компаниях в Области залива, однако я обнаружил, что за час я получил не более 10 компаний, либо FAANG, либо компаний, связанных с машинным обучением, таких как H2O.ai. Видимо, я не знаком с этой областью. Первый составленный список не является ни исчерпывающим, ни актуальным.
Как только я нашел этот кураторский список инженерных блогов, я сказал себе, что это правильный путь. Компании, большие или малые, скорее всего, будут работать с хорошей инженерной практикой, если будут вести хорошие инженерные блоги. Это на самом деле лучшая отправная точка, чем случайные страницы с вакансиями и реклама в LinkedIn, поскольку блоги на английском языке рассказывают гораздо больше о том, что происходит под капотом в инженерном отделе. К счастью, я до сих пор помню, как создавать краулеры, и научился Asyncio у своего коллеги Винсента. Почему бы не использовать инструменты и Интернет, чтобы расширить список и создать хороший список инжиниринговых компаний?
Введение Асинкио
Хотя в этом тривиальном случае может и не быть необходимости использовать asyncio с Python 3.7, это было бы хорошим упражнением и расширяемым решением. Прежде чем углубляться в детали варианта использования, давайте взглянем на асинхронный ввод-вывод и его реализацию в Python 3.7.
На высоком уровне asyncio — это библиотека для написания параллельного кода с использованием синтаксиса async
/await
в Python 3.
API высокого уровня
Корутины
Coroutines — это высокоуровневый API/абстракция, объявленная с синтаксисом async/await, который является предпочтительным способом написания асинхронных приложений (Python 3.7+).
Ожидаемые
Мы говорим, что объект является ожидаемым, если его можно использовать в выражении ожидания. Многие асинхронные API предназначены для приема ожидаемых значений.
Существует три основных типа ожидаемых объектов:
- сопрограммы
- Задачи: используется для одновременного планирования сопрограмм.
- Futures: низкоуровневый ожидаемый объект, представляющий конечный результат асинхронной операции.
Некоторые примеры перечислены ниже.
Узнайте больше о компании из Google и Википедии
Вы можете легко извлечь список названий компаний и URL-адресов блогов из репозиториев github (repo1, repo2) после некоторого базового синтаксического анализа регулярных выражений. Посетите https://regexone.com/ или https://regex101.com/, если вам нужна дополнительная помощь.
Получить местоположения из Google Place API
Новый API Google Place требует регистрации и заполнения данных кредитной карты. Но это бесплатно для минимального использования в первый год. Ознакомьтесь с более подробной информацией на странице https://developers.google.com/places/web-service/intro и будьте осторожны, чтобы не раскрывать свои токены и контролировать свои расходы.
Будьте осторожны, чтобы не раскрыть свои токены, и контролируйте свои расходы.
В нашем случае важно выяснить местоположение, широту и долготу офисов технологической компании. Конечная точка поиска — это то, с чем нужно работать. Немного сложно, если вы будете искать название компании отдельно в API Google Place, вы не получите никакого результата. Чтобы увеличить коэффициент совпадения, требуется больше информации о местоположении, например USA
, Bay Area
или Seattle
, для сбора с названием компании. Также поможет включение таких ключевых слов, как office
или headquarters
.
После запуска скрипта выше мы можем получить подробную информацию о компании, которую мы ищем. Вот расширенный вывод строки json.
{
"name": "databricks",
"url": "https://databricks.com/blog/category/engineering",
"place_response": {
"candidates": [
{
"formatted_address": "160 Spear St 13th floor, San Francisco, CA 94105, USA",
"geometry": {
"location": {
"lat": 37.791365,
"lng": -122.393741
},
"viewport": {
"northeast": {
"lat": 37.79293997989272,
"lng": -122.3921091701073
},
"southwest": {
"lat": 37.79024032010727,
"lng": -122.3948088298927
}
}
},
"name": "Databricks Inc."
}
],
"status": "OK"
}
}
Получить фильмографические данные из Википедии
После получения местоположения нам нужна более подробная информация о компаниях. Википедия является хорошим источником информации для некоторых известных государственных/частных компаний с полезной информацией о численности персонала, доходах, отрасли и учредителях.
Для сравнения ниже будут представлены два метода, один из которых synchronous()
, а другой asynchronous()
.
Синхронный метод и асинхронный метод
Сравнение
Чтобы сравнить синхронные и асинхронные методы, для сравнительного анализа используются названия 100 компаний. В частности, одни и те же данные передаются в методы synchronous()
и asynchronous()
, определенные выше, в той же среде (Mac OS, ЦП: Intel Core i7 2,2 ГГц, память: 16 ГБ 1600 МГц DDR3). Метод asynchronous()
в 7,7 раза быстрее, чем метод synchronous()
, в небольшой выборке, где в каждом случае задействовано в общей сложности 200 HTTP-запросов. Хотя в обоих методах есть некоторые нетривиальные синхронные операции, такие как синтаксический анализ HTML, ясно, что неблокирующий рабочий процесс asyncio
+ aiohttp
делает весь процесс извлечения из Википедии намного быстрее.
Вот результаты для ссылок. Еще одна интересная часть заключается в том, что ясно, что последовательность асинхронных результатов не гарантируется, тогда как синхронный метод возвращает результаты в точном порядке в качестве входных данных.
Synchronous:
- finished extracting 100 wiki records in 54.54 seconds
- Wiki titles of the results:
Netflix, Google, Yahoo!, Uber, Adobe, Lyft, Facebook, DiDi, Stripe, Salesforce.com, Netflix, Google, Yahoo!, Uber, Adobe, Lyft, Facebook, DiDi, Stripe, Salesforce.com, Netflix, Google, Yahoo!, Uber, Adobe, Lyft, Facebook, DiDi, Stripe, Salesforce.com, Netflix, Google, Yahoo!, Uber, Adobe, Lyft, Facebook, DiDi, Stripe, Salesforce.com, Netflix, Google, Yahoo!, Uber, Adobe, Lyft, Facebook, DiDi, Stripe, Salesforce.com, Netflix, Google, Yahoo!, Uber, Adobe, Lyft, Facebook, DiDi, Stripe, Salesforce.com, Netflix, Google, Yahoo!, Uber, Adobe, Lyft, Facebook, DiDi, Stripe, Salesforce.com, Netflix, Google, Yahoo!, Uber, Adobe, Lyft, Facebook, DiDi, Stripe, Salesforce.com, Netflix, Google, Yahoo!, Uber, Adobe, Lyft, Facebook, DiDi, Stripe, Salesforce.com, Netflix, Google, Yahoo!, Uber, Adobe, Lyft, Facebook, DiDi, Stripe, Salesforce.com,
===
Asynchronous:
- finished extracting 100 wiki records in 7.06 seconds
- Wiki titles of the results:
Lyft, Uber, Yahoo!, Salesforce.com, Lyft, Lyft, Lyft, Lyft, Lyft, Salesforce.com, Yahoo!, Stripe, Lyft, Uber, Salesforce.com, Adobe, Uber, Salesforce.com, Stripe, Netflix, Salesforce.com, Netflix, Salesforce.com, Uber, Netflix, Adobe, Google, Salesforce.com, Salesforce.com, Netflix, Lyft, Uber, Netflix, Adobe, Adobe, Uber, Stripe, Stripe, Salesforce.com, Netflix, Uber, Netflix, Stripe, Stripe, Stripe, Stripe, Adobe, DiDi, Stripe, Adobe, Google, Netflix, DiDi, Adobe, Google, Netflix, Google, Uber, Google, Yahoo!, Uber, Uber, Netflix, DiDi, Adobe, Yahoo!, Yahoo!, Facebook, Salesforce.com, DiDi, Adobe, DiDi, Facebook, Google, Stripe, Google, Google, Facebook, Yahoo!, DiDi, Yahoo!, Yahoo!, Facebook, Yahoo!, Facebook, Facebook, DiDi, DiDi, Google, DiDi, Facebook, Google, Lyft, Lyft, Adobe, Facebook, Facebook, Facebook, DiDi, Yahoo!,
Следующие шаги
Как далеко это от моего местоположения?
Есть много вещей, с которыми можно поиграться, когда у вас есть данные из Google Place и Wikipedia. Вы можете попробовать рассчитать расстояние между целевой компанией и вашим текущим местоположением с помощью библиотеки geopy
. Эта информация очень полезна, чтобы отфильтровать офисы, которые находятся слишком далеко от вашего местоположения, или ранжировать компании на основе близости.
О чем говорят эти компании в инженерных группах?
О чем говорят эти компании в инженерных группах?
В этом тривиальном случае обходчики не нужны. Однако, если мы хотим расширить работу, чтобы охватить все страницы английского блога каждой компании, необходима какая-либо форма системы сканирования. Простой/Python способ сделать это — использовать Scrapy для сканирования соответствующих страниц английского блога и использовать текстовую аналитику для создания рабочих облаков или группировки компаний по технологиям. Это было бы забавным упражнением и интересными фактами для открытия.
Больше информации, пожалуйста!
Всегда есть больше источников данных, которые предоставляют подробную информацию о государственных/частных компаниях. Вот несколько веб-сайтов и сервисов, с которых можно начать:
Заключительные слова
Вот часть кураторского списка компаний, который я получил в результате этого упражнения. Надеюсь, вам понравится пост.
использованная литература
- https://docs.python.org/3/library/asyncio.html
- https://github.com/kilimchoi/engineering-blogs
- https://github.com/sumodirjo/engineering-blogs
- https://magic.io/blog/uvloop-blazing-fast-python-networking/
- https://scraperwiki.com/2011/12/how-to-scrape-and-parse-wikipedia/
- https://codesnippet.io/wikipedia-api-tutorial/
- https://developers.google.com/places/web-service/search