Сбор адресов McDonald’s с помощью Python
Я работал над классификационной моделью машинного обучения, чтобы определить уровень диабета среди населения США. После поиска в сети готовых данных я понял, что мне придется проделать некоторую практическую работу, чтобы собрать свой собственный набор данных.
Я решил включить в свои данные переменную отношения Макдональдс к населению. Для этого мне нужно было получить количество ресторанов по округам. Есть некоторые веб-сайты, которые предлагают эти данные, но они берут за это около 75 долларов, и я определенно не хотел платить за свои данные.
Так как я не нашел открытого API, я решил заняться парсингом веб-страниц. В этом сообщении блога я поделюсь кодом Python, который я использовал для сбора адресов ресторанов McDonald’s по почтовому индексу.
Содержание:
Начало работы с веб-парсингом:
- Выберите веб-страницу для извлечения данных: Я использовал MENUISM для извлечения адресов McDonald’s по почтовому индексу. Обратите внимание, что я собрал данные для личного проекта без намерения использовать их в коммерческих целях. Обязательно ознакомьтесь с условиями использования веб-страницы, которую вы используете для извлечения данных.
- Проверьте анатомию 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!