темный логотип proxyscrape

Как соскрести веб-сайт JavaScript с помощью Python

Как это сделать, Python, Скрапинг, Ноябрь -15-20225 минут чтения

Веб-браузеры используют Javascript для создания динамичного и интерактивного опыта для пользователя. Большинство приложений и функций, делающих Интернет незаменимым в современной жизни, закодированы в виде Javascript. На ранних этапах развития Javascript веб-страницы были статичными и не предлагали пользователю ничего, кроме перехода по ссылкам.

Оглавление

Веб-браузеры используют Javascript для создания динамичного и интерактивного опыта для пользователя. Большинство приложений и функций, делающих Интернет незаменимым в современной жизни, закодированы в виде Javascript. На ранних этапах развития Javascript веб-страницы были статичными и не предлагали пользователю ничего, кроме перехода по ссылкам и загрузки новых страниц. 

Ниже перечислены некоторые из динамических улучшений сайта, которые выполняются с помощью Javascript.

  • Проверка правильности ввода в веб-формах
  • Анимация элементов страницы, такая как изменение размера, перемещение и выцветание
  • Загрузка новых данных без перезагрузки страницы
  • Воспроизведение аудио и видео
  • Устранение проблем с совместимостью браузеров

С помощью скраппинга можно собирать структурированные данные с веб-сайтов в автоматическом режиме. Веб-скрепинг также известен как извлечение веб-данных. Некоторые из основных случаев использования веб-скрепинга таковы:

  • Мониторинг новостей
  • Ценовой интеллект
  • Генерация свинца
  • Мониторинг цен
  • Исследование рынка

Для начала давайте разберемся, зачем нужно скрести сайты.

Зачем вам нужно скрести Javascript-сайт?

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

  • Электронная коммерция
  • Социальные сети
  • Банковское дело 
  • Финансы
  • Маркетинг 
  • Недвижимость
  • Финансы
  • Поисковая оптимизация
  • Линии продаж

Ниже перечислены причины, по которым компании нуждаются в сканировании веб-сайтов.

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

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

Листинг недвижимости - агенты по недвижимости используют веб-скраппинг для пополнения своей базы данных доступных объектов для аренды или продажи. 

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

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

Скраппинг веб-сайта на Javascript с помощью Python

Давайте посмотрим, как можно использовать Selenium для сканирования сайтов Javascript.

Установка библиотеки Selenium

Установить Selenium можно с помощью следующей команды.

pip install selenium

Установка веб-драйвера

Знаете ли вы, что Selenium имитирует настоящий браузер? Он не использует вашу установку chrome, а использует драйвер для запуска браузера. Веб-драйверы Selenium относятся как к языковым связкам, так и к реализации отдельного кода управления браузером. Вам необходимо загрузить веб-драйвер и добавить его в переменную окружения path. Мы будем использовать веб-драйвер Firefox, и вы можете установить его по этой ссылке.

Пример

Давайте рассмотрим простой пример selenium, который включает в себя сбор заголовка веб-сайта. Для этого мы сначала импортируем webdriver из selenium в файл python, как показано ниже:

из selenium import webdriver

Мы должны указать путь, по которому расположен веб-драйвер. После этого нужно инициализировать веб-драйвер Firefox.

WEBDRIVER_PATH = './'
драйвер = webdriver.Firefox(WEBDRIVER_PATH)

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

URL = 'https://www.google.com'
driver.get(URL)
print (driver.title)

Выполнение приведенного выше кода открывает окно firefox, которое выводит в консоль заголовок сайта. В качестве примера в данном случае мы задали URL Google, поэтому результат будет выглядеть следующим образом:

Это страница google из веб-драйвера firefox. Заголовок, выведенный на консоль, будет выглядеть так:

Мы должны вручную закрыть открытое окно firefox. Мы добавим driver.quit() в конец нашего кода, чтобы окно автоматически закрылось после завершения работы. 

из selenium import webdriver 

WEBDRIVER_PATH = './'
driver = webdriver.Firefox(WEBDRIVER_PATH) 

URL = 'https://www.google.com'
driver.get(URL)
print (driver.title)
driver.quit()

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

из selenium import webdriver 
 
WEBDRIVER_PATH = './' 
driver = webdriver.Firefox(WEBDRIVER_PATH) 
URL = 'https://www.youtube.com'
driver.get(URL)
print (driver.title)
driver.quit()

Давайте попробуем кое-что новое. Мы можем изменить поле поиска и заполнить его словом "Selenium" с помощью класса "Keys", как показано ниже.

из selenium.webdriver.common.keys import Keys

После инициализации веб-драйвера firefox и получения заголовка Youtube мы создаем объект, содержащий поле поиска с помощью xpath.

search_box = driver.find_element_by_xpath('//input[@id="search"]')

Затем мы отредактируем содержимое поисковой строки и заполним ее словом "Selenium".

search_box.send_keys('Selenium')

Как только мы заполним поисковую строку нужным содержимым, мы можем нажать "Enter", чтобы сделать поиск активным.

поле_поиска.send_keys(Ключи.ENTER)

На изображении ниже видно, что в строке поиска Youtube содержится слово "Selenium".

Использование прокси-сервера

Прокси необходимы, когда вам нужно локализовать веб-контент. Они также необходимы, когда вы отправляете слишком много запросов на сайт за короткий промежуток времени. Прокси для Selenium нужны, когда требуется автоматическое тестирование. Однако, чтобы использовать прокси Selenium для анализа веб-сайта на Javascript, вам необходимо использовать Selenium wire, который расширяет привязки Selenium и предоставляет доступ к базовым запросам, выполняемым браузером.

Для использования Selenium с прокси-сервером необходимо установить следующий пакет.

из selenium wire import webdriver

После установки библиотеки Python selenium-wire вам необходимо отметить следующее:

  • имя_прокси
  • пароль_прокси
  • proxy_url
  • proxy_port

В качестве примера мы привели случайный номер порта 8080. Вы можете задать имя пользователя, пароль и URL нужного сайта по своему усмотрению.

proxy_username = "USER_NAME"
proxy_password = "PASSWORD"
proxy_url = "Any Website URL"
proxy_port = 8080

options = {
    "proxy": {
        "http": f"http://{proxy_username}:{proxy_password}@{proxy_url}:{proxy_port}",
        "verify_ssl": False,
    },
}

Для веб-драйвера Selenium лучше всего подходят прокси-серверы для жилых помещений. Это связано с тем, что их не так легко обнаружить, в отличие от прокси центров обработки данных. Они направляют запросы клиентов через жилые IP-адреса и вызывают больше доверия, чем IP-адреса центров обработки данных. Они также полезны для доступа к сложным сайтам, использующим Javascript, таким как Youtube, Google, Instagram и т. д.

Зачем использовать прокси для скрапинга JS-сайта

Использовать прокси-серверы для создания скрап-файлов необходимо по следующим причинам:

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

Заключение

Веб-скреппинг очень важен, так как его можно использовать для:

  • Анализ рекламы товаров/услуг и анализ их бюджетов
  • Прогнозирование модных тенденций для сохранения конкурентоспособности
  • Обследование каналов социальных сетей, поиск потенциальных клиентов и т.д.

Далее мы рассказали о том, как с помощью Selenium можно скрести веб-сайты с поддержкой Javascript в Python. Вы можете скрести содержимое как статических сайтов, так и динамических, например Youtube. Для автоматизированного тестирования также необходимо использовать прокси Selenium. Лучше всего использовать жилые прокси, так как они очень быстрые и не могут быть легко обнаружены, в отличие от других прокси.

Надеюсь, вы получили представление о том, как с помощью Python скрафтить сайт на Javascript.