Сбор адресов McDonald’s с помощью Python

Я работал над классификационной моделью машинного обучения, чтобы определить уровень диабета среди населения США. После поиска в сети готовых данных я понял, что мне придется проделать некоторую практическую работу, чтобы собрать свой собственный набор данных.

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

Так как я не нашел открытого API, я решил заняться парсингом веб-страниц. В этом сообщении блога я поделюсь кодом Python, который я использовал для сбора адресов ресторанов McDonald’s по почтовому индексу.

Содержание:

  1. Начало работы с веб-парсингом
  2. Код Python
  3. Советы и уловки по парсингу
  4. Дополнительная проверка качества

Начало работы с веб-парсингом:

  1. Выберите веб-страницу для извлечения данных: Я использовал MENUISM для извлечения адресов McDonald’s по почтовому индексу. Обратите внимание, что я собрал данные для личного проекта без намерения использовать их в коммерческих целях. Обязательно ознакомьтесь с условиями использования веб-страницы, которую вы используете для извлечения данных.
  2. Проверьте анатомию URL-адреса веб-страницы: поищите повторяющиеся шаблоны в URL-адресе, которые помогут вам определить переменные, передаваемые в URL-адрес при загрузке нового содержания. В моем случае я искал рестораны McDonald’s, передавая в URL разные почтовые индексы (рис. 1).

3. Проверьте HTML-документ веб-страницы: если вы используете Google Chrome, вы можете получить доступ к панели элементов, выполнив действия, показанные на рис. 2. Отметьте данные, которые вы хотите собрать, и проверьте его HTML-элемент. Определите атрибут элемента, который содержит извлекаемое содержимое. На рис. 3 показан пример атрибута onclick элемента «a», который содержит название города в объявлениях McDonald’s.

Код Python

Выполнив шаги, описанные в последнем разделе, я собрал свой код веб-парсинга. Эта процедура фиксирует название ресторана, первую строку адреса и город.

Советы и приемы веб-парсинга

  • Разделите запросы на удаление веб-страниц на несколько этапов: я выполнил процедуру очистки с группами по 1000 запросов (1000 почтовых индексов) и сохранил данные на свой компьютер. При парсинге веб-сайтов сервер может в любой момент прервать соединение с вашим IP-адресом, и вы не хотите рисковать потерять слишком много данных.
  • Установите случайные задержки между каждым запросом, чтобы избежать сбоя сервера веб-сайта.
  • Переключайте заголовки пользовательского агента и удаляйте файлы cookie между каждым циклом очистки. Примеры заголовков пользовательских агентов можно найти в Интернете.
  • Обязательно используйте пул прокси, если вы очищаете большой объем данных. Я без проблем отменил около 15 тыс. Запросов без использования прокси, но в идеале вы должны использовать пул прокси-серверов для больших объемов запросов.
  • Если вам нужно снова загрузить данные по прошествии некоторого времени, убедитесь, что элементы и атрибуты HTML не изменились, чтобы ваш код парсинга работал.

Дополнительная проверка качества

Мне удалось собрать основной номер и название улицы для каждого ресторана McDonald’s с помощью процедуры парсинга в сети Menuism. Я использовал Google Maps Places API, чтобы получить полный отформатированный адрес, чтобы проверить, действительно ли адреса соответствуют ресторану McDonald’s, и проверить, работает ли он по-прежнему.

Если вы хотите узнать об этом процессе, взгляните на мою запись в блоге Google Maps: Places API!