Как парсить веб-страницы с использованием ProxyCrawl в Python
Изучите простой способ парсинга веб-страниц с использованием JavaScript
В связи с растущей популярностью современных фреймворков JavaScript, таких как React, Angular и Vue, все больше и больше веб-сайтов создается динамически с использованием JavaScript. Это создает проблему для парсинга веб-страниц, поскольку HTML-разметка недоступна в исходном коде. Поэтому мы не можем напрямую парсить эти веб-страницы JavaScript и должны сначала отобразить их как обычную HTML-разметку. В этой статье мы расскажем, как отображать веб-страницы JavaScript с помощью ProxyCrawl, удобного веб-сервиса, который можно использовать для помощи в парсинге веб-страниц JavaScript.
Демонстрационный сайт, который мы будем использовать в этом руководстве, - это http://quotes.toscrape.com/js/. Если вы откроете этот веб-сайт, щелкните правой кнопкой мыши на веб-странице и выберите «Просмотреть исходный код», вы увидите только некоторый JavaScript-код, а не HTML-разметку. К счастью для этого сайта, данные включены в тег <script>
. Однако для многих веб-сайтов, особенно созданных с использованием Angular, в JavaScript-коде мало данных, и их необходимо отобразить, прежде чем их можно будет парсить. Например:
Прежде чем начать, нам нужно установить пакеты, необходимые для парсинга веб-страниц. Рекомендуется создать виртуальное окружение и установить пакеты там, чтобы они не повредили системные библиотеки. Для простоты мы будем использовать conda, чтобы создать виртуальное окружение. Чтобы упростить запуск интерактивного кода Python, мы также установим iPython:
(base) $ **conda create --name js_scrape python=3.10**
(base) $ **conda activate js_scrape**
(js_scrape) $ **pip install -U requests lxml**
(js_scrape) $** pip install ipython**
(js_scrape) $ **ipython**
- requests — Используется для загрузки содержимого веб-страницы.
- lxml — Используется для парсинга отображенной HTML-разметки с использованием XPath.
Давайте сначала попробуем немного изучить API Crawling ProxyCrawl.
Для API ProxyCrawl первые 1000 запросов бесплатны. И если вы добавите свои платежные данные, вы получите дополнительно 9000 бесплатных запросов. Поэтому, если вам просто нужно время от времени парсить некоторые веб-страницы JavaScript, ProxyCrawl должен быть достаточным, и вам не нужно устанавливать какие-либо другие пакеты и настраивать продвинутые параметры. Однако, если у вас есть проекты, которые нужно часто парсить веб-страницы JavaScript, стоимость может быть значительной. Если вы или ваша команда не можете себе позволить это или хотите сэкономить немного денег, вы можете использовать Selenium в качестве альтернативы.
Для использования ProxyCrawl вам сначала нужно войти в систему. Вы можете войти в систему с помощью учетной записи Google или GitHub. После входа в систему вы попадете на страницу панели управления. Нажмите на «Crawling API», чтобы продолжить:
И вы попадете на страницу API Crawling ProxyCrawl. На этой странице отображаются детали использования API. Вам нужно будет часто возвращаться на эту страницу, если вы используете ProxyCrawl в своем проекте, чтобы следить за использованием и стоимостью.
Теперь нажмите «Start crawling now», и вы откроете страницу документации API Crawling. Там есть некоторые инструкции о том, как использовать API. Важно прокрутить вниз и найти раздел "Authentication", где вы можете увидеть токены, необходимые для парсинга. Здесь мы будем использовать токен JavaScript, потому что мы собираемся парсить веб-страницу JavaScript.
С помощью токена JavaScript мы теперь можем начать парсить нашу веб-страницу JavaScript. Давайте сначала посмотрим, что мы получим, если не будем использовать прокси. Затем мы адаптируем код соответствующим образом для парсинга веб-страницы JavaScript:
Если код выглядит незнакомым для вас, вам может быть полезно ознакомиться с этой статьей, в которой кратко, но понятно рассказывается о requests, lxml и XPath.
Как и ожидалось, мы не можем парсить данные с веб-сайта JavaScript с помощью обычного кода парсинга. Нам нужно использовать прокси, чтобы сначала отобразить JavaScript-код как HTML-разметку. Теперь давайте использовать полученный выше токен JavaScript:
Важные замечания относительно кода:
- Мы должны передать домен ProxyCrawl в качестве префикса для конечного URL. Домен можно найти в документации ProxyCrawl. Он одинаков для всех.
- Важно указать токен JavaScript в конечном URL. Токен указан здесь в виде обычного текста только для демонстрационных целей. На практике НИКОГДА не раскрывайте токен таким образом в своем коде. Вместо этого вы должны указать токен с помощью переменной среды. Рекомендуется использовать pydantic для управления переменными среды и учетными данными.
При выполнении кода данные могут быть успешно спарсены, что означает, что веб-страница JavaScript успешно отображена как HTML-разметка:
Теперь вернемся на панель управления ProxyCrawl и посмотрим использование API. Вам может потребоваться подождать несколько минут, пока статус обновится.
Поскольку ProxyCrawl является коммерческим и не бесплатным для использования, вы должны внимательно следить за использованием, чтобы не переплатить. И еще раз напоминаем, НИКОГДА не раскрывайте токен в любом общедоступном репозитории, чтобы не платить за случайное или злонамеренное использование другими.
В этой короткой статье мы показали, как использовать ProxyCrawl для отображения веб-страницы JavaScript, чтобы ее можно было спарсить с помощью нашего обычного кода парсинга. Под капотом веб-страница JavaScript отображается с помощью некоторого безголового браузера на сервере ProxyCrawl, что можно сделать с помощью пакета Selenium. Поэтому, если у вас ограниченный бюджет или вам часто нужно парсить веб-страницы JavaScript, стоит потратить немного больше времени на настройку Selenium локально и использовать его для отображения веб-страниц JavaScript. В отдельной статье скоро будет опубликовано подробное руководство по этой теме.
Связанная статья: