Я не могу разобрать страницу и получить ссылки Nokogiri - PullRequest
0 голосов
/ 19 января 2020

Я не могу получить список ссылок через анализ Nokogiri, https://chromedriver.storage.googleapis.com/index.html?path=79.0.3945.36 /

Что я делаю не так?

links = Nokoiri::HTML('https://chromedriver.storage.googleapis.com/index.html?path=79.0.3945.36/')

или

links = Nokoiri::XML('https://chromedriver.storage.googleapis.com/index.html?path=79.0.3945.36/')

--->

#(Document:0x3fcdda1b988c {
  name = "document",
  children = [
    #(DTD:0x3fcdda1b5b24 { name = "html" }),
    #(Element:0x3fcdda1b46fc {
      name = "html",
      children = [
        #(Element:0x3fcdda1b0804 {
          name = "body",
          children = [
            #(Element:0x3fcdda1ac920 {
              name = "p",
              children = [ #(Text "https://chromedriver.storage.googleapis.com/index.html?path=79.0.3945.36/")]
              })]
          })]
      })]
  })
puts links.to_html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p>https://chromedriver.storage.googleapis.com/index.html?path=79.0.3945.36/</p></body></html>
=> nil

Ответы [ 2 ]

1 голос
/ 19 января 2020

Это не будет работать, так как вся страница создается с JavaScript. Тело документа содержит только один тег сценария. Откройте исходный код страницы или посмотрите на необработанный ответ, а не просто посмотрите на визуализированный DOM в инструментах веб-инспектора / разработчика.

view-source:https://chromedriver.storage.googleapis.com/index.html?path=79.0.3945.36/

Nokogiri - это просто HTML парсер, а не браузер, поэтому он не запускает JavaScript. Хотя вы могли бы использовать браузер без заголовка, такой как фантом. js, вы могли бы просто захотеть найти API, который вместо этого предоставляет нужные вам данные. Веб-скребок - это обычно неправильный ответ на любой вопрос.

0 голосов
/ 19 января 2020

Я нашел более интересное решение)), например: link_driver = Nokogiri::HTML(page.source).at('a:contains("mac")').values.join('') chromedriver_storage_page = 'https://chromedriver.storage.googleapis.com/' File.new('filename.zip', 'w') << URI.parse(chromedriver_storage+link).read

содержит ("ma c") может изменить содержит ("linux") или содержит («победа»), это не имеет значения, выберите любую версию операционной системы

и 2 решения - для анализа страницы chromedriver.chromium.org и получения информации обо всех версиях. Если версия на сайте более поздняя, ​​чем моя, тогда я подставляю номер версии в новой строке для загрузки
chromedriver_storage = 'https://chromedriver.storage.googleapis.com/'
chromedriver = '79.0.3945.36/' - используйте Capybara и вырежьте только версию
zip = 'chromedriver_mac64.zip'
link = chromedriver_storage+chromedriver+zip File.new('filename.zip', 'w') << URI.parse(link).read

получается, что анализатор в автономном режиме можно вставить в задачу crontab для обновления версии текущего браузера

...