В предыдущем посте я писал о парсинге статических веб-страниц.



В этом руководстве мы рассмотрим, как очистить динамические веб-страницы. По сравнению со статическими веб-страницами, динамические веб-страницы - это страницы, которые извлекают данные из баз данных с помощью Javascript, и изменение информации происходит часто.

Если вы попытались очистить статическую веб-страницу с помощью Rvest, вы могли не получить динамическую информацию, созданную с помощью Javascript на веб-сайте. Таким образом, мы можем использовать дополнительную библиотеку RSelenium, которая позволит нам решить эту проблему.

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

Библиотека RSelenium позволяет нам открыть браузер для передачи команд для получения желаемой информации. В этом примере я бы использовал браузер Google Chrome.

Сначала мы запустим сервер и браузер Selenium с помощью функции rsDriver (). Затем мы перейдем к установке типа нашего браузера с номером порта, который мы выберем для работы.

Для получения дополнительной информации ознакомьтесь с пакетом CRAN: https://cran.r-project.org/web/packages/RSelenium/RSelenium.pdf.

Иногда могут возникнуть проблемы с загрузкой сервера и браузера Selenium из-за версии Google Chrome. Таким образом, отличный способ найти работоспособную версию Selenium - это сначала проверить версии, полученные в настоящее время, с помощью функции binman :: list_versions («chromedriver»).

Я получил несколько сообщений от читателей, указывающих на то, что при запуске вышеуказанного кода, binman :: list_versions () появляется ошибка.

Изменить: обходное решение

Скорее всего, это может быть несоответствие между браузером пользователя, например Версия Chrome и веб-драйвер Selenium. Не волнуйтесь; это приходит с простым исправлением.

  1. Удалите код binman :: list_versions ()
  2. В зависимости от типа вашего браузера сначала проверьте, на какой версии он работает. В Chrome нажмите на три верхние точки ›Справка› О Google Chrome, чтобы увидеть текущую версию.

И для меня на момент написания этой статьи указано, что Chrome работает на версии 87.0.4280.141. (Версия 87)

4. Затем перейдите по следующей ссылке, чтобы проверить текущие веб-драйверы Selenium для различных версий Chrome. Https://chromedriver.chromium.org/downloads

Как мы видим, он рекомендует мне использовать ChromeDriver 87.0.4280.88, поскольку мой Chrome работает на версии 87.

5. Оттуда мы должны ввести версию ChromeDriver в этом случае: 87.0.4280.88 в наш код, и это должно позволить нам легко запустить удаленный браузер.

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

Как только мы получим текущие исходные версии chrome, мы можем ввести версию в нашу функцию rsDriver ().

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

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

Во-первых, я бы проверил разрешения на очистку, чтобы не нарушать какие-либо условия обслуживания веб-сайтом. Если вы не читали часть 1 этого руководства, мы могли бы быстро проверить, добавив /robots.txt в конце домена веб-сайта.

Здорово! Похоже, что веб-сайт, который мы хотим очистить, не находится в списке запрещенных. Затем мы можем перейти к навигации по нашему удаленному драйверу с помощью функции $ navigate (). Затем мы использовали бы remDr $ getPageSource () для чтения данных HTML.

Как только мы дойдем до этого этапа, мы сможем очищать динамические веб-страницы через браузер Selenium. Затем мы будем использовать функции в Rvest так же, как в части 1 этого руководства.

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

Мы также использовали функцию str (), чтобы убедиться, что мы получаем правильное количество продуктов и цен, чтобы не пропустить пропущенные значения при выборе узлов для очистки. Судя по нашим выводам, эта конкретная страница содержит 30 продуктов.

Затем мы можем объединить оба объекта во фрейм данных с помощью функции data.frame () или экспортировать его как файл CSV.

Выход

Экспорт в виде файла CSV

P.S не забудьте установить рабочий каталог с помощью функции setwd (), чтобы упростить поиск экспортированных файлов!

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

Таким образом, мы всегда должны не забывать выключать наш сервер и удаленный драйвер, когда мы закончим.

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

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



Новичок в программировании на R и не знаете, с чего начать? Посмотрите мою электронную книгу с пошаговыми инструкциями!