у вас есть 2 варианта здесь:
переключатель чистый HTTP выскабливание в какой-то инструмент, который поддерживает яваскрипта оценки, такие как Капибара (с proper driver выбран). Это может быть медленным, поскольку вы используете браузер без браузера под капотом, плюс вам придется установить некоторые тайм-ауты или указать другой способ убедиться, что блоки текста, которые вас интересуют, загружаются, прежде чем начинать какие-либо выскабливания.
Второй вариант - использовать консоль веб-разработчика и выяснить, как загружаются эти блоки текста (какие вызовы AJAX, их параметры и т. Д.) И реализовать их в вашем скребке. Это более продвинутый подход, но более эффективный, поскольку вы не будете делать никаких дополнительных работ, как вы делали в варианте 1.
Удачного дня!
UPDATE:
Ваш код выше не работает, потому что ответ является HTML-код, завернутые в объект JSON, в то время как вы пытаетесь разобрать его в качестве исходного HTML. Это выглядит следующим образом:
{
"error": 0,
"msg": "request successful",
"paidDocIds": "some ids here",
"itemStartIndex": 20,
"lastPageNum": 50,
"markup": 'LOTS AND LOTS AND LOTS OF MARKUP'
}
Что вам нужно разворачивать JSON, а затем разобрать, как HTML:
require 'json'
json = JSON.parse(open(url).read) # make sure you check http errors here
html = json['markup'] # can this field be empty? check for the json['error'] field
doc = Nokogiri::HTML(html) # parse as you like
Я также advise you against с использованием open-uri
, поскольку ваш код может стать уязвимой, если вы используете динамические URL, потому что open-uri
(прочитайте связанную статью за подробностями) и используйте хорошие и более функциональные библиотеки, такие как HTTParty и RestClient. не
UPDATE 2: Минимальный рабочий сценарий для меня:
require 'json'
require 'open-uri'
require 'nokogiri'
url = 'http://www.justdial.com/functions/ajxsearch.php?national_search=0&act=pagination&city=Delhi+%2F+NCR&search=Pandits&where=Delhi+Cantt&catid=1195&psearch=&prid=&page=2'
json = JSON.parse(open(url).read) # make sure you check http errors here
html = json['markup'] # can this field be empty? check for the json['error'] field
doc = Nokogiri::HTML(html) # parse as you like
puts doc.at_css('#newphoto10').attr('title')
# => Dr Raaj Batra Lal Kitab Expert in East Patel Nagar, Delhi
я проверил его в консоли ... все Ajax вызова имеют тот же параметр, кроме страницы нет ...... Единственное, что Изменяется страница нет & я уже помещал страницу no в placeholder и помещал ее в цикл –
Если вы откроете этот URL-адрес в браузере: 'http://www.justdial.com/functions/ajxsearch.php?national_search=0&act=pagination&city=Delhi+%2F+NCR&search = Pandits & where = Delhi + Cantt & catid = 1195 & psearch = & prid = & page = 2 он показывает некоторый ответ JSON, кажется, работает нормально, не так ли? –
мой фактический url это http://www.justdial.com/Delhi-NCR/Pandits-%3Cnear%3E-delhi/ct-1195 url, о котором я упомянул в своем вопросе, я получил его с консоли –