#javascript #html #ajax #parsing #scrape
#javascript #HTML #ajax #синтаксический анализ #очистка
Вопрос:
Я пытался очистить и в конечном итоге проанализировать некоторые данные (в частности, доступность и цену) из hostels.com например http://www.hostels.com/hosteldetails.php/HostelNumber.11890 . Проблема в том, что как только вы выбираете количество ночей и выбираете «бронировать сейчас», через строку URL ничего не передается (я полагаю, все это делается через Ajax) Я не могу перейти непосредственно к определенной дате или временному интервалу.
Я пробовал использовать эмуляторы браузера, такие как Selenium, IRobotSoft и FakeApp, и хотя я использовал Selenium и Fake для выполнения большей части работы с полным исходным кодом, это было некрасиво и все еще утомительно, когда приходилось очищать (и анализировать с помощью другого программного обеспечения) несколько страниц в день.
Я также пробовал синтаксический анализатор HTML DOM, веб-браузер с поддержкой PHP, HtmlUnit, cScrape.php , Лом. Либо они не смогли обработать Ajax, либо мне не повезло заставить даже их работать.
В идеале я хотел бы что-то, что может запускаться с сервера, с как можно меньшим количеством зависимостей, но на данный момент я просто хотел бы запустить это.
Теперь, потратив много часов на попытки заставить это работать. Я все еще чувствую, что не уверен, с чего начать. Может кто-нибудь просто указать мне правильное направление?. Должен ли я вернуться и потратить больше времени на HtmlUnit? что было бы наилучшей практикой для такого сайта, как этот?
Спасибо
Ответ №1:
Я действительно вNode.js atm (серверный javascript, на случай, если вы не знакомы), вот что я рекомендую. Что потрясающе в использовании его для очистки сайтов, так это то, что вы можете использовать jQuery или любой другой ваш любимый фреймворк JS, чтобы выполнить всю работу по анализу нужной вам информации! Ознакомьтесь со следующими ресурсами, чтобы начать:
http://blog.dtrejo.com/scraping-made-easy-with-jquery-and-selectorga
https://github.com/tmpvar/jsdom
Комментарии:
1. Вау, Jquery великолепен, я попробую, спасибо.
Ответ №2:
Страница, на которую вы ссылаетесь, похоже, не использует AJAX. Вместо этого то, что вы называете AJAX, является запросом POST (в отличие от материала, переданного в URL, который является запросом GET). Я предлагаю вам ознакомиться с различиями между ними. Попытайтесь понять, что происходит, это важнее, чем полагаться на какой-то сторонний инструмент, который может оказаться очень негибким.
Установите Firebug и посмотрите, какие переменные отправляются в запросе POST. Теперь проделайте то же самое на вашем любимом языке программирования. Проанализируйте HTML-ответ на запрос POST для получения необходимой информации.
Кроме того, 1 за попытку попробовать так много разных решений и не сдаваться.
Комментарии:
1. Спасибо за помощь, теперь это имеет гораздо больше смысла.
Ответ №3:
Я нашел Celerity (http://celerity.rubyforge.org ), библиотека JRuby, которая использует HtmlUnit под капотом, чтобы быть очень надежным решением для «сбора данных через Интернет».
Я обнаружил, что с помощью Ruby Celerity разработка была намного быстрее по сравнению с полномасштабной Java (HtmlUnit). Кроме того, из-за «упаковки» HtmlUnit в Celerity я смог перейти к HtmlUnit, поскольку мне нужно было выполнить более сложную работу.
Я добился успеха с сайтами, которые богаты DHTML, а также используют Ajax; и хотя я использовал несколько вызовов sleep () для ожидания ответов Ajax — все работало так, как ожидалось.
Попробуйте!