Проблемы со скрейпингом сайта с использованием Poltergeist/PhantomJS/Capybara/Nokogiri. Задержка на сайте

Я пытаюсь получить доступ к ряду веб-сайтов, используя полтергейст и копибару в скрипте ruby. У меня странные проблемы с определенным веб-сайтом: http://www.slate.com/

Вот основные элементы скрипта:

require 'nokogiri'
require 'capybara/poltergeist'
slate = "http://www.slate.com"
OPTIONS = {:js_errors => false, :debug => true, :timeout => 120, :phantomjs_options => ['--ignore-ssl-errors=false', '--load-images=false']}
USER_AGENT = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1"

Capybara.register_driver :poltergeist do |app|
  Capybara::Poltergeist::Driver.new(app, OPTIONS)
end

session = Capybara::Session.new(:poltergeist)

session.driver.headers = {"User-Agent" => USER_AGENT}

session.visit slate

Ответ, который я получаю, странный и непохожий на другие сайты, которые я посещаю таким образом. после session.visit он возвращает [object Object], тогда запрос был успешным и возвращает мне мою подсказку IRB. Но затем я автоматически получаю подсказку timeout timeout примерно через 5 или 10 секунд, а затем MySlateData data is empy.

irb(main):016:0> session.visit slate
[object Object]
=> {"status"=>"success"}
irb(main):017:0> timeout timeout
MySlateData data is empty

Можно ли как-то выяснить, почему ответ, кажется, странным образом удерживает мой сеанс? Если я запускаю OPTIONS с отладкой, я действительно не вижу ничего полезного.

irb(main):014:0> session.visit slate
{"id":"bba72e5e-fd27-4d92-bdb8-7cc0172afaf6","name":"visit","args":["http://www.slate.com"]}
[object Object]
{"command_id":"bba72e5e-fd27-4d92-bdb8-7cc0172afaf6","response":{"status":"success"}}
=> {"status"=>"success"}
irb(main):015:0> timeout timeout
MySlateData data is empty

По какой-то причине я не могу очистить полученный HTML-код, поскольку он мешает загрузке HTML-кода в nokogiri.


person roy    schedule 11.06.2016    source источник
comment
Какие версии полтергейста и PhantomJS вы используете?   -  person Thomas Walpole    schedule 11.06.2016
comment
Полтергейст — 1.8.1, а PhantomJS — 2.0.0.   -  person roy    schedule 11.06.2016


Ответы (1)


Капибара не удерживает ваш сеанс. Poltergeist/PhantomJS запускает «браузер» асинхронно из вашего кода. Посторонний контент, который вы видите в своем выводе, является выводом журналов консоли с веб-сайта, который вы посетили. Убедившись, что вы используете последние версии полтергейста (1.9+) и фантомов (2.1.1+), вы можете удалить некоторые из них, поскольку они будут создавать меньше ошибок на странице.

person Thomas Walpole    schedule 11.06.2016
comment
Хм, в этом есть смысл, но по какой-то причине кажется, что эти ошибки могут мешать попыткам извлечь информацию со страницы с помощью nokogiri. Хотя, возможно, это отдельный вопрос. Обновление сейчас. - person roy; 11.06.2016
comment
Любые ошибки определенно вызовут проблемы с попытками очистить информацию, поскольку ошибка обычно указывает на то, что что-то на самом деле загружено неправильно. - person Thomas Walpole; 11.06.2016