r_ajax_scraping
Примеры работы с динамическими веб-страницами при скачивании данных из Интернета в R
Мотивация
Процесс сбора данных в ряду других стадий проведения статистического анализа, наверное, можно считать самым утомительным, особенно если речь идёт о работе с большими базами данных. Поэтому даже если от этого процесса нельзя отвертеться (вдруг кто-то уже собирал подобные данные), хочется свести затраты ручного труда к минимуму. Так что, как только передо мною встаёт факт необходимости сбора данных - в последнее время довольно большого размера - я начинаю обдумывать способы реализации закона Парето. Для конкретной ситуации я бы сформулировала его как выполнение 80% работы в 20% времени, чтобы в остальное - есть мороженное и смотреть британские детективные сериалы, например
Конечно, поиск подходящего решения может занять очень много времени. Это особенно актуально для вопросов, которые не имеют хорошего описания, документации или поддержки сообщества пользователей программного обеспечения. К сожалению, работа с динамичными веб-страницами при скачивании данных из Интернета (или просто веб скрапинге) относится к ним. С этим нужно что-то делать.
Цель
Я не знаю ситуацию с Питоном, но за последнее время об основах веб скрапинга и его примерах в статистическом пакете R на английском была опубликована только одна книга: Munzert, S., Rubba, C., Meißner, P., & Nyhuis, D. (2014). Automated data collection with R: A practical guide to web scraping and text mining. John Wiley & Sons. Когда я только начинала пробовать свои силы в веб скрапинге, будучи студенткой 4 курса бакалавриата политологии, эта книга была по-настоящему настольной для меня, но даже она не идеальна. Хотя она содержит раздел про динамические веб-страницы (AJAX), он был что называется теоретическим: в нём не было примеров. Обращение к материалам сайта Stackoverflow дало основу для модифицируемых в дальнейшем решений. Ими я и хочу поделиться в надежде, что кому-либо из коллег по цеху они пригодятся в их стремлении оптимизировать свою работу.
Оговорка
Если кто-то ещё не понял, то речь идёт о веб скрапинге (web scraping), который я люблю называть сбором данных из Интернета.
Собственно, содержимое
В чём отличие AJAX от HTML
Без ухода в историю понятий и чрезмерно технические детали для пользователей можно объяснить разницу между AJAX и HTML с помощью следующего примера. Допустим, кто-то открыл веб-страницу в браузере (назовём этого человека пользователем), на которой отображается информация о контактах и режиме работы некоего музея. Но последняя информация содержится в ссылке. Задача пользователя - узнать, сможет ли он посетить музей в воскресенье.
Если бы исходная страница (с контактами и ссылкой на режим работы) была создана с помощью HTML, или языка гипертекстовой разметки, то пользователь, нажав на ссылку режима работы музея, увидел бы, что в его браузере обновляется страница. Затем бы он увидел, что исходная страница сменилась новой, на которой он видит расписание работы музея на каждый день недели, но не видит информации с исходной страницы.
С другой стороны, будь исходная страница сделана с помощью AJAX, или технологий программирования, то пользователь бы видел новую информацию информацию на странице (расписание работы) и старую тоже (контакты музея) без того, чтобы веб-страница обновлялась в браузере. Таким образом, пользователь видит и то, и другое. Сам термин AJAX расшифровывается как Асинхронный JavaScript и XML. Много непонятных терминов! JavaScript и XML в свою очередь языки программирования (в основном или помимо прочего; например, XML в основном используется как язык маркировки, однако, есть примеры использования и для программирования).
Если смотреть на разницу между HTML и AJAX с более технической стороны, то в первом случае для отображения новой или другой информации по ссылке заново отсылается информация о странице с сервера, тогда во втором - информация с сервера требуется только для обновления части страницы. С точки зрения опыта пользователя, AJAX отличная вещь, поскольку делает работу быстрее и удобнее. Но при попытке веб скрапинга это создаёт технические проблемы. С ними, тем не менее, можно справиться. Как - по этой ссылке.
Больше полезных ресурсов про AJAX
-
Ullman, C., & Dykes, L. (2007). Beginning Ajax. John Wiley & Sons.
-
Thomas, A. P. (2008). Ajax: The Complete Reference.
-
Одно из многочисленных и, кстати, дублирующих другие пособий по базовой работе в {RSelenium}
-
Юникод и текстовые обозначения для команд клавиатуры и мышки при работе с {RSelenium}