2013-09-30 2 views
5

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

Важные факторы при принятии решения, что делать я использую

  1. Я бы выскабливание около 2000 страниц ежедневно, поэтому нужно прилично быстро решение
  2. Некоторые из этих страниц заполнения данных через AJAX после загрузки страницы.
  3. Мой веб-стол Ruby/Rails с MySql и т. Д.
  4. Я написал скребки раньше, используя scrapy (python) (+ Selenium для страниц с включенным ajax).

Мои сомнения

  1. Я смущен, должен ли я пойти с питоном (т.е. Scrapy + Селен, я думаю, что это лучшая альтернатива в питоне), или вместо того, чтобы предпочесть что-то рубин (как вся моя codebase находится в рубине).
  2. Scrapy + selenium часто медленный, есть ли более быстрые альтернативы в рубине? (Это упростит решение) Самая популярная альтернатива Ruby с поддержкой Ajax Загруженные страницы, похоже, Watir Может кто-нибудь прокомментировать ее скорость. Кроме того, есть ли другие альтернативы рубин (например Mechanize/Nokogiri + что-то еще для Ajax Loaded страницы)

EDIT

Законченное использованием Watir-WebDriver + Nokogiri, так что я могу использовать активную запись при хранении данных. Nokogiri намного быстрее, чем Watir-webdriver при извлечении данных.

Scrapy был бы быстрее, но компромисс скорости был не таким значительным, как компромисс сложности при обращении с различными типами веб-сайтов в scrapy (например, с помощью ajax-поиска на некоторых целевых сайтах, которые я должен обязательно пройти) ,

Надеюсь, это поможет кому-то.

+0

Это не может соответствовать вашему случай использования, но и для AJAX страниц с механизировать/Nokogiri, что вы можете сделать, это обновить, что страницы каждые 5-10 секунд. Хотя он не идеален и зависит от требуемой частоты, вы можете получить любые данные, загружаемые через эти вызовы JS. –

+0

Я не совсем уверен, что вы говорите правильно. Я думаю, механизация/Nokogiri не имеют переводчиков javascript (http://stackoverflow.com/questions/3852678/can-mechanize-read-ajax-ruby) –

+0

Они этого не делают, но даже если данные пересылаются в таблицу после интервала , Пока эти данные сохраняются в таблице, если вы просто переустановите страницу, вы сможете ее очистить. Вам просто нужно проверить в браузере, что после того, как данные страницы заполняются через AJAX, если при обновлении страницы данные все еще существуют. Это то, что вы можете использовать Mechanize/Nokogiri для очистки, но вам нужно будет повторно загрузить эту страницу. –

ответ

1

Если скорость важна, вы можете использовать драгоценный камень watir-webdriver для управления PhantomJS (без браузера с поддержкой JavaScript). Откройте любую страницу в PhantomJS, и если watir-webdriver слишком медленно, чтобы получить данные из нее, вы можете передать отображаемый HTML на Nokogiri.

Подробнее:

+0

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

+0

ссылка на резервную копию сейчас –

+0

Закончена с использованием watir-webdriver + nokogiri, хотя и не драгоценного камня, поскольку я предпочел некоторую гибкость для будущего. –

1

Вы должны проверить это руководство Making AJAX Applications Crawlable опубликованный Google, он обсуждает AJAX ползком схему, некоторые веб-сайт поддержки.

Вы хотите найти #! в хэш-фрагменте URL-адреса, это указывает искателю, что сайт поддерживает схему обхода AJAX и что сервер вернет HTML-снимок страницы, когда URL-адрес слегка изменен.

Full Specification

+1

Спасибо за руководство (поможет мне, если я создам приложения с поддержкой ajax, которые я хочу очистить Google). К сожалению, не все мои целевые сайты следуют этому. –

Смежные вопросы