Я делал веб-соскабливание раньше, но это никогда не было таким сложным. Я хочу получить информацию о курсах со школьного сайта. Однако вся информация о курсе отображается в кошмаре веб-скребка.
Во-первых, когда вы нажимаете URL-адрес «Расписание занятий», он сначала направляет вас по нескольким другим страницам (я считаю, что нужно установить файлы cookie и проверить другое дерьмо).
Затем он, наконец, загружает страницу с iframe, которая, по-видимому, только нравится загружать, когда она загружается с веб-страницы учреждения (например, arizona.edu).
Оттуда представления формы должны быть сделаны с помощью кнопок, которые фактически не перезагружают страницу, а просто представляют собой запрос AJAX, и я думаю, что он просто манипулирует iframe.
Этот запрос особенно сложно воспроизвести. Я использую PHP и скручиваю, чтобы имитировать браузер, посещающий начальную страницу, собирать правильные файлы cookie и т. Д. Но я думаю, что у меня проблема с заголовками, которые посылает функция curl, потому что она никогда не позволяет мне выполнять какой-либо запрос после загрузки начальной «формы поиска».
Любая помощь будет потрясающей …
http://www.arizona.edu/students/registering-classes -> «Расписание занятий»
Или просто здесь: http://schedule.arizona.edu/
Если вам нужно соскрести сайт с интенсивным использованием JS / AJAX – вам нужно что-то более мощное, чем php;)
Во-первых, это должен быть полный браузер с возможностью выполнять JS, а во-вторых – должен быть некоторый api для автоматического просмотра.
Предполагая, что вы ребенок (кому еще нужно разбирать школу), попробуйте Firefox с iMacros . Если вы более опытный ветеран – посмотрите на Селен.
Я использовал много страниц с JS, iframe и всевозможными вещами. Я использовал PhantomJS в качестве браузера без браузера, который позже я обернул оболочкой PhantomCurl . Обертка представляет собой скрипт python, который можно запускать из командной строки или импортировать в виде модуля
Вы уверены, что вам разрешили очистить сайт?
Если да, то они могут просто дать вам простой REST api?
В редких случаях, когда они позволят вам перейти к данным, но не будут предоставлять API, я бы посоветовал установить некоторое программное обеспечение для записи вашего взаимодействия с HTTP с веб-сайтом, возможно, с wirehark или с некоторым прокси-сервером HTTP, но важно, чтобы вы получаете всю информацию о записанных HTTP-запросах. После этого проанализируйте его и попробуйте воспроизвести его до последнего бита.
Среди возможных задач может случиться так, что в какой-то момент времени сервер отправляет вам сгенерированный javascript, который должен быть выполнен клиентским браузером, чтобы перейти к следующему шагу. В этом случае вам нужно будет понять, как анализировать полученный javascript, и выяснить, как двигаться дальше.
Также хорошей идеей было бы не запускать все ваши HTTP-запросы в пакетном режиме, ставить некоторые случайные задержки, чтобы сервер выглядел более «человечным».
Но в конце концов вам нужно выяснить, все ли это стоит проблемы? Так как почти любой дорожный блок до соскабливания можно обойти, но он может стать довольно привлекательным и трудоемким.