CoderCastrov logo
CoderCastrov
Питон

Объяснение вложенных пауков в Scrapy с использованием веб-сайта Airbnb | Парсинг с 🐍

Объяснение вложенных пауков в Scrapy с использованием веб-сайта Airbnb | Парсинг с 🐍
просмотров
3 мин чтение
#Питон

Парсинг - это искусство сбора данных в Интернете. Иногда вам может потребоваться получить глубокую информацию с веб-сайтов. Для этого вы будете использовать вложенные пауки. Давайте посмотрим, как это работает!

Эта статья является частью серии "Парсинг с использованием Python 🐍", где я намерен представить и обучить основным и более опытным концепциям парсинга.


"Первое правило веб-парсинга - не наносить вред веб-сайту. Второе правило веб-парсинга - НЕ наносить вред веб-сайту." - от Zite


Введение

Недавно мы провели практическое применение парсинга на сайте Airbnb. Мы выбрали город, даты и диапазон цен, чтобы собрать основную информацию о объявлениях. Сегодня давайте разберем процесс, как углубиться и перейти по разным типам URL-адресов в рамках одного процесса парсинга.

Ранее, переходя со страницы поиска на страницу поиска, мы смогли получить информацию о тысячах объявлений на Airbnb, такую как название, тип комнаты, URL, цена, рейтинг, количество комментариев, количество гостей, изображение, информацию о "суперхосте" и все другие характеристики, которые можно найти на главной странице.

Но что, если вам нужно узнать больше? Если вам нужно описание отеля для вашего NLP-проекта, дополнительные фотографии, подробности о плате и правилах дома?

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

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

Классический парсер

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

Вложенный парсер

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

И, используя второй обратный вызов, вы будете парсить конечную страницу. Обратите внимание, что мы используем обратный вызов parse_hotel для перехода по ссылкам, но все еще используем обратный вызов parse, когда мы хотим перейти от страницы поиска к страницам поиска.

И все! Довольно просто, не так ли?

Предупреждение: поскольку Scrapy является асинхронной системой скрапинга, все страницы не будут собраны в том же порядке, в котором вы строго делали бы это! Это ничего не меняет в итоговом результате (пока вы получаете данные), но всегда хорошо знать 😉


Чтобы следить за процессом скрапинга, я обычно добавляю конструктор в свой паук, чтобы создать атрибуты nb_page и nb_items в моем классе. Затем каждый раз, когда вызывается один из обратных вызовов, я увеличиваю эти значения и, при необходимости, регистрирую их с URL-адресом страницы или названием элемента.


Дополнительные советы

  • При выполнении вложенного парсинга вы будете открывать гораздо больше веб-страниц. Поэтому будьте вежливыми, используйте файл настроек, чтобы уменьшить количество одновременных запросов и их частоту, чтобы избежать перегрузки сервера цели.
  • Использование большего количества веб-страниц также означает вызывать больше подозрений! Уменьшение количества запросов также поможет избежать блокировки и бана до окончания сбора данных.
  • В некоторых случаях вы можете даже представить себе третий уровень парсинга. Здесь это может быть открытие страницы хоста, например. Но так как вы можете просто собрать URL профиля на этом этапе, я рекомендую выполнить это с помощью двух разных парсингов. Первый - вложенный, чтобы получить все отели. И второй - классический (не вложенный), где точкой входа для парсинга является список ранее собранных URL профилей.
  • При практике вложенного парсинга всегда добавляйте URL страницы, с которой вы извлекли информацию, в объект элемента. Позже, при работе с данными, вам будет полезно найти его в своем DataFrame. Вы можете получить к нему доступ из _response.url_ во втором парсере.

Заключение

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

Надеюсь, вам понравилось и до скорой встречи 🤠