Как разобрать изображение href в Нокогири - PullRequest
0 голосов
/ 10 ноября 2019

Я анализирую веб-страницу с помощью Nokogiri и хотел бы проанализировать URL-адрес изображения. Это мои настройки:

require 'nokogiri'
require 'open-uri'

doc = Nokogiri::HTML(open('https://themeforest.net/search?sort=sales'))

Целевой веб-сайт содержит следующий код:

<div class="_2_3rp " style="padding-top:50.847457627118644%">            
  <div style=""> 
    <img class="_1xvs1" src="https://themeforest.img.customer.envatousercontent.com/files/274559780/screenshots/00-Preview.jpg?auto=compress%2Cformat&amp;fit=crop&amp;crop=top&amp;w=590&amp;h=300&amp;s=37354d884fd0f3b574238e013b4ea423"                                         
      title="Avada | Responsive Multi-Purpose Theme"                    
      alt="Avada | Responsive Multi-Purpose Theme" style="left: 0%;">            
  </div>                                                                     
</div>

Однако, когда я запускаю:

puts doc.search("//div[@class = '_2_3rp ']")

, я получаю следующее:

  <div class="_2_3rp " style="padding-top:50.847457627118644%"><div style="height:100%" class="lazyload-placeholder"></div></div>
  <div class="_2_3rp " style="padding-top:50.847457627118644%"><div style="height:100%" class="lazyload-placeholder"></div></div>
  .....
  => nil

Почему я не получаю класс img, а вместо этого получаю lazyload-placeholder? Можно ли как-нибудь преодолеть это и избежать заполнителя изображения?

1 Ответ

0 голосов
/ 10 ноября 2019

Вот минимальный код, который я придумал для проверки вашего утверждения:

require 'nokogiri'

doc = Nokogiri::HTML(<<EOT)
<div class="12345">
    <div>
        <img class="67890" src="https://foo.bar">
    </div>
</div>
EOT

doc.search('//div[@class=12345]').map(&:to_html)
# => ["<div class=\"12345\">\n" +
#     "    <div>\n" +
#     "        <img class=\"67890\" src=\"https://foo.bar\">\n" +
#     "    </div>\n" +
#     "</div>"]
#     "</div>"]

Похоже, тег img есть.

Вы используете Nokogiri::XML разобрать. Нет, потому что строгий синтаксический анализ происходит и с HTML, который не является строгим, могут возникнуть проблемы, если HTML искажен.

...