Обзор

Однажды моя девушка попросила меня порекомендовать несколько технологических компаний для ее следующей работы. В то время как я больше знаком с работой в области обработки данных/машинного обучения в технологических компаниях, она ищет возможности инженера-программиста с сильным акцентом на программное обеспечение/инженерию. Я изо всех сил старался очистить свои воспоминания о стартапах и крупных компаниях в Области залива, однако я обнаружил, что за час я получил не более 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 для сканирования соответствующих страниц английского блога и использовать текстовую аналитику для создания рабочих облаков или группировки компаний по технологиям. Это было бы забавным упражнением и интересными фактами для открытия.

Больше информации, пожалуйста!

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

Заключительные слова

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

использованная литература