Подтвердить что ты не робот

Очистить динамический веб-сайт

Каков наилучший способ соскабливать динамический веб-сайт, где большая часть контента генерируется тем, что кажется аякс-запросами? У меня есть предыдущий опыт работы с коммандой Mechanize, BeautifulSoup и python, но я готов к чему-то новому.

- Edit-- Более подробно: я пытаюсь очистить CNN основная база данных. Там есть масса информации, но, похоже, нет api.

4b9b3361

Ответ 1

Это сложная проблема, потому что вам нужно либо перепроектировать javascript для каждого сайта, либо реализовать механизм javascript, и запустить скрипты (у которых есть свои трудности и подводные камни).

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

-Adam

Ответ 2

Лучшим решением, которое я нашел, было использование Firebug для мониторинга XmlHttpRequests, а затем для использования script для повторной отправки.

Ответ 3

Selenium IDE, инструмент для тестирования, - это то, что я использовал для много скрипирования экрана. Есть несколько вещей, которые он плохо обрабатывает (Javascript window.alert() и всплывающие окна в целом), но он выполняет свою работу на странице, фактически вызывая события кликов и вводя текст в текстовые поля. Поскольку часть IDE работает в Firefox, вам не нужно выполнять все управление сеансами и т.д., Так как Firefox позаботится об этом. IDE записывает и воспроизводит тесты.

Он также экспортирует код С#, PHP, Java и т.д. для сборки скомпилированных тестов/скребок, которые выполняются на сервере Selenium. Я сделал это для более чем нескольких моих сценариев Selenium, что значительно упрощает хранение очищенных данных в базе данных.

Сценарии довольно просты в написании и изменении, состоящие из таких вещей ( "clickAndWait", "submitButton" ). Стоит посмотреть, что вы описываете.

Ответ 4

Совет Адама Дэвиса прочен.

Я также хотел бы предложить вам "реконструировать" то, что делает JavaScript, и вместо того, чтобы пытаться очистить страницу, вы выдаете HTTP-запросы, которые JavaScript выдает и интерпретируют сами результаты (скорее всего, в JSON формат, приятный и легкий для синтаксического анализа). Эта стратегия может быть от тривиального до полного кошмара, в зависимости от сложности JavaScript.

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

Ответ 5

Существует немного кривой обучения, но такие инструменты, как Pamie (Python) или Watir (Ruby), позволят вам защелкнуться в веб-браузере IE и получить элементы. Это оказывается проще, чем Mechanize и другие инструменты уровня HTTP, так как вам не нужно эмулировать браузер, вы просто запрашиваете браузер для элементов html. И это будет проще, чем обратное проектирование вызовов Javascript/Ajax. При необходимости вы также можете использовать инструменты, такие как красивый суп в сочетании с Pamie.

Ответ 6

Вероятно, самый простой способ - использовать IE webbrowser control на С# (или на любом другом языке). У вас есть доступ ко всем вещам внутри браузера из коробки + вам не нужно заботиться о файлах cookie, SSL и т.д.

Ответ 7

я обнаружил, что в элементе управления IE Webbrowser есть всевозможные причуды и обходные пути, которые оправдывали бы какое-то высокое качество программного обеспечения, чтобы позаботиться обо всех этих несоответствиях, расположенных вокруг shvwdoc.dll api и mshtml и обеспечить структуру.

Ответ 8

Кажется, это довольно распространенная проблема. Интересно, почему кто-то не разработал программный браузер? Я предвижу Firefox, который вы можете вызывать из командной строки с URL-адресом в качестве аргумента, и он загрузит страницу, запустит все начальные загрузки JS-событий и сохранит результирующий файл.

Я имею в виду Firefox, и другие браузеры уже делают это, почему мы не можем просто отключить материал UI?

Ответ 9

Первый вопрос, который у меня есть: можете ли вы подтвердить, что сайт абсолютно не работает без Javascript? Вы были бы удивлены, сколько сайтов все еще можно использовать, если вы отключите javascript. Вероятно, вы будете перенаправлены на несколько иной набор URL-адресов.