Как написать парсер кинопоиска на python с файлами и исходным кодом
Как он работает
Данный парсер собирает информацию со страниц сайта, которые содержат в своём адресе list. Проще говоря, это парсер страниц фильтраций и страниц пагинаций. Во каламбур :). Не стану скрывать, работает он довольно медленно, ибоб чтобы получить доступ к страницам данного сайта требуется использовать, так называемый динамический парсинг. То есть, парсинг страниц с предварительной отрисовкой и обработкой браузером.
Это первый барьер, который необходимо преодолеть, перед тем как получить доступ к необходимым страницам. Второй барьер на нашем пути, это блокировка определённых IP адресов с которых происходит парсинг. По этому используются, соответственно подобранные прокси.
Рабочий парсер сайта kinopoisk можно скачать от сюда. Тебе останется только активировать виртуальное окружение и установить необходимые пакеты.
Как его сделать, установка пакетов
Данный прасер мы напишем на python с использованием сторонних библиотек и утилит. Для начала создадим виртуальное оружение и установим его. Так же необходимо скачать мой прокси ротатор.
Создай файл main.py в директории проекта. Наш скрипт не будет очень большим, чуть больше 100 строчек кода. Вот полностью готовый код парсера:
Дальше, чтобы было проще понять код, я разбил его на структурные элементы и функции. Начнём с главной функции run. Эта функция запускает парсинг и проводит ротацию прокси и решает, когда парсинг стоит закончить.
Она же, создаёт виртуальный браузер и делает запросы необходимых URL.
Дальше, Селениуму нужно зацепиться за что-то при загрузке. То есть начать действовать незамедлительно, как только появятся соответствующие элементы на странице. В случае с kinopoisk это элементы с классом base-movie-main-info_link__YwtP1. Вот цикл обхода по всем доступным страницам в том или ином списке.
Стоит обратить внимание на то, что я сохраняю результат в таблицу при парсинге каждой страницы и после обхода всех страниц. Таким образом, даже если вдруг парсер "падёт", мы всё ещё сможем получить необходимые данные.
Функция get_page_number, проще простого. Находим необходимый элемент и конвертируем строку в число:
Функция save_to_exel, ещё проще. Так как мы установили пакет pandas, всё что делает эта функция это создаёт особый фрейм данных и конвертирует его в таблицу:
Функция scrape_kinopoisk_list ищет необходимые элементы на странице и заполняет отправленный словарь.
Это собственно всё. Осталось только запустить функцию run. То, как это делать решать тебе. Просто запустить её внизу скрипта или сделать как я, то есть:
Сбор бесплатных прокси
Так как kinopoisk это сайт работающий на территории России и СНГ(по крайней мере аудитория оттуда) то и прокси должны быть оттуда, для большей правдоподобности наших парсеров на обычных пользователей.
Итак, как и откуда можно взять бесплатные прокси? Представляю тебе моего скраппера бесплатных прокси, с возможностью выбора и фильтрации прокси по странам, используемым протоколам и типу самих прокси.
Чтобы собрать только русские прокси с используемыми протоколоми http, https, socks4, socks5 введи следующую команду:
Если хочешь узнать какие коды, каким странам соответствуют введи:
В результате ты получишь JSON файлы со списками прокси. Все такие файлы находятся в директории data. Всё происходит в параллельном режиме и ты можешь в любой момент остановить скрипт если посчитаешь, что тебе хватит.
Проверка бесплатных прокси
Итак, мы собрали сотни прокси и могу тебе гарантировать большинство из них это откровенный мусор. Нам нужно будет его отфильтровать, при чём, отфильтровать используя в качестве фильтра целевой сайт, то есть kinopoisk.
Для проверки работоспособности прокси на том или ином сайте, я создал специальный CLI инструмент. Который ты можешь скачать по ссылке в предыдущем предложении (⊙_(⊙_⊙)_⊙). Вот как проверить список таких прокси, команда:
Где -i это те прокси которые ты получил используя мой скрапер прокси
Где -o это имя файла-результата где каждому прокси будет присвоен вес.
Где -U это список сайтов проверки
Больше опций и вариантов можно посмотреть используя -h флаг. Но в данном случае нас больше заинтересует log.txt файл. Ведь там хранятся результаты проверок каждого прокси и то сколько раз он успешно подключался к целевому сайту. Выбери самые успешные прокси и объедини их в один JSON файл, который потом будешь использовать для парсинга сайтов.
0
0
Внешние ссылки
Релевантные вопросы
Что такое ручной парсинг?
Это процесс извлечения данных из веб ресурсов или документов подразумевающий ручной, то есть исполненный человеком без помощи каких-либо вспомогательных скриптов или программ.
Что такое облачный парсер
Это услуга по сборе информации из различных источников и группировки их в различных форматах, которая проводится на облачных серверах поставщика данной услуги.
Какой инструмент для веб-скрапинга самый лучший?
Выбор инструмента для парсинга зависит от характера веб-сайта и его сложности. Пока инструмент может помочь вам получить данные быстро и гладко с приемлемой или нулевой стоимостью, вы можете выбрать инструмент, который вам нравится.
Это туториал с примером показывающий то, как нужно писать парсеры интернет магазинов с обходами блокировок при помощи прокси и их ротацией. Используя Selenium и некоторые самолично сделанные инструменты. Всё это …