CoderCastrov logo
CoderCastrov
Парсер

Парсинг динамических веб-сайтов с использованием Scraper API и Python

Парсинг динамических веб-сайтов с использованием Scraper API и Python
просмотров
3 мин чтение
#Парсер
Table Of Content

В последней статье серии о парсинге я показал вам, как использовать Scraper API для парсинга веб-сайтов, использующих прокси, чтобы уменьшить вероятность блокировки. Сегодня я покажу вам, как использовать Scraper API для парсинга веб-сайтов, использующих AJAX для отображения данных с помощью JavaScript, одностраничных приложений (SPA) или парсинга веб-сайтов, использующих фреймворки, такие как ReactJS, AngularJS или VueJS.

Я буду работать с тем же кодом, который я написал в вводной статье.

Давайте рассмотрим простой пример. Есть веб-сайт, который показывает ваш IP-адрес, называется HttpBin. Если вы загрузите его через браузер, он покажет ваш реальный IP-адрес. Например, в моем случае он вернул:

{"origin": "12.48.217.89, 12.48.47.29"}

Конечно, не мой оригинальный IP-адрес. Мы получим доступ к этому API с помощью AJAX-запроса. Что я сделал, я создал простую страницу с названием httpbin API через AJAX:

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Testing HTTP BIN</title>
    <script src="[https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js](https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js)"></script>
</head>
<body>
    <h2>Узнайте свой IP-адрес</h2>
    <div id="ip"></div>
    <script>
        $(function() {
            $.get( "[https://httpbin.org/ip](https://httpbin.org/ip)", function( data ) {
            //$( ".result" ).html( data );
            $('#ip').html(data.origin)
            //alert(data.origin);
        });
        });
    </script>
</body>
</html>

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

Когда вы проверите исходный код, вы найдете что-то вроде этого:

Как видите, <div> с идентификатором ip пустой, что говорит о том, что данные отображаются другими средствами. Теперь я получу доступ к странице через Scraper API.

URL_TO_SCRAPE = '[http://adnansiddiqi.me/httpbin.html'](http://adnansiddiqi.me/httpbin.html')payload = {'api_key': API_KEY, 'url': URL_TO_SCRAPE, 'render': 'true'}r = requests.get('[http://api.scraperapi.com'](http://api.scraperapi.com'), params=payload, timeout=60)print(r.status_code)html = r.text.strip()

Вы видите, на этот раз я передал render:true, и когда я запускаю его, он возвращает следующее:

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

Хорошо, это было игрушечное приложение, а как насчет тестирования его на "реальном" веб-сайте? Я выбрал комментарий Cricbuzz об одном из тестовых матчей между Англией и Австралией в Ashes(https://www.cricbuzz.com/cricket-full-commentary/20719/eng-vs-aus-5th-test-the-ashes-2019). Один из записей о доставке отображается ниже:

Поиск этой страницы, открыв ViewSource, и вы не найдете текст. Причина в том, что данные загружаются через API, и JavaScript их отображает.

Теперь попробуем это сделать с помощью Scraper API. Я просто изменил значение URL_TO_SCRAPE выше. Поиск Jack Leach to Hazlewood и он вернул следующее:

Как видите, он прямо здесь!

Заключение

В этой статье вы узнали, насколько легко использовать Scraper API для парсинга динамических веб-страниц или скрининга включенных в Javascript веб-сайтов. Вам не нужно выполнять отдельную настройку, не нужно устанавливать и тратить время на настройку Selenium+Web Driver. Вы можете использовать имеющиеся знания и выполнить свою работу. Все, что требуется, это установить параметр render в значение True. Вам также не нужно беспокоиться о прокси-IP или платить сотни долларов, особенно если вы работаете в индивидуальном порядке или в стартапе. Компания, в которой я работаю, тратит сотни долларов ежемесячно только на прокси-IP.

О, если вы зарегистрируетесь здесь по моей реферальной ссылке или введете промокод SCRAPE156980, вы получите 10% скидку на это. Если вы не получите скидку, просто дайте мне знать по электронной почте на моем сайте, и я обязательно помогу вам.

_Эта статья была опубликована _здесь.


Подпишитесь на DDIntel здесь.

Посетите наш веб-сайт здесь: https://www.datadriveninvestor.com

Присоединяйтесь к нашей сети здесь: https://datadriveninvestor.com/collaborate