Мне нужно очистить страницы карьеры нескольких компаний (с их разрешения).Скремблирование веб-страниц, поддерживающих ajax
Важные факторы при принятии решения, что делать я использую
- Я бы выскабливание около 2000 страниц ежедневно, поэтому нужно прилично быстро решение
- Некоторые из этих страниц заполнения данных через AJAX после загрузки страницы.
- Мой веб-стол Ruby/Rails с MySql и т. Д.
- Я написал скребки раньше, используя scrapy (python) (+ Selenium для страниц с включенным ajax).
Мои сомнения
- Я смущен, должен ли я пойти с питоном (т.е. Scrapy + Селен, я думаю, что это лучшая альтернатива в питоне), или вместо того, чтобы предпочесть что-то рубин (как вся моя codebase находится в рубине).
- Scrapy + selenium часто медленный, есть ли более быстрые альтернативы в рубине? (Это упростит решение) Самая популярная альтернатива Ruby с поддержкой Ajax Загруженные страницы, похоже, Watir Может кто-нибудь прокомментировать ее скорость. Кроме того, есть ли другие альтернативы рубин (например Mechanize/Nokogiri + что-то еще для Ajax Loaded страницы)
EDIT
Законченное использованием Watir-WebDriver + Nokogiri, так что я могу использовать активную запись при хранении данных. Nokogiri намного быстрее, чем Watir-webdriver при извлечении данных.
Scrapy был бы быстрее, но компромисс скорости был не таким значительным, как компромисс сложности при обращении с различными типами веб-сайтов в scrapy (например, с помощью ajax-поиска на некоторых целевых сайтах, которые я должен обязательно пройти) ,
Надеюсь, это поможет кому-то.
Это не может соответствовать вашему случай использования, но и для AJAX страниц с механизировать/Nokogiri, что вы можете сделать, это обновить, что страницы каждые 5-10 секунд. Хотя он не идеален и зависит от требуемой частоты, вы можете получить любые данные, загружаемые через эти вызовы JS. –
Я не совсем уверен, что вы говорите правильно. Я думаю, механизация/Nokogiri не имеют переводчиков javascript (http://stackoverflow.com/questions/3852678/can-mechanize-read-ajax-ruby) –
Они этого не делают, но даже если данные пересылаются в таблицу после интервала , Пока эти данные сохраняются в таблице, если вы просто переустановите страницу, вы сможете ее очистить. Вам просто нужно проверить в браузере, что после того, как данные страницы заполняются через AJAX, если при обновлении страницы данные все еще существуют. Это то, что вы можете использовать Mechanize/Nokogiri для очистки, но вам нужно будет повторно загрузить эту страницу. –