Невозможно определить правильный CSS-селектор для очистки с помощью Mechanize - PullRequest
0 голосов
/ 19 марта 2019

Я создал веб-скребок, который успешно вытаскивает почти всего, что мне нужно, из веб-страницы, на которую я смотрю.Цель состоит в том, чтобы вытащить URL для определенного изображения, связанного со всеми кофе, найденными по определенному URL.

Задача граблей, которую я определил для завершения очистки, выглядит следующим образом:

mechanize = Mechanize.new
mechanize.get(url) do |page|
    page.links_with(:href => /products/).each do |link|
        coffee_page = link.click

            bean = Bean.new

            bean.acidity = coffee_page.css('[data-id="acidity"]').text.strip.gsub("acidity ","")
            bean.elevation = coffee_page.css('[data-id="elevation"]').text.strip.gsub("elevation ","")
            bean.roaster_id = "2"
            bean.harvest_season = coffee_page.css('[data-id="harvest"]').text.strip.gsub("harvest ","")
            bean.price = coffee_page.css('.price-wrap').text.gsub("$","")
            bean.roast_profile = coffee_page.css('[data-id="roast"]').text.strip.gsub("roast ","")
            bean.processing_type = coffee_page.css('[data-id="process"]').text.strip.gsub("process ","")
            bean.cultivar = coffee_page.css('[data-id="cultivar"]').text.strip.gsub("cultivar ","")
            bean.flavor_profiles = coffee_page.css('.price-wrap+ p').text.strip
            bean.country_of_origin = coffee_page.css('#pdp-order h1').text.strip
            bean.image_url = coffee_page.css('img data-featured-product-image').attr('src')

            if bean.country_of_origin == "Origin Set" || bean.country_of_origin == "Gift Card (online use only)"
                bean.destroy
            else
                ap bean
            end
    end
end

Теперь мне нужна вся информация на странице, и я ищу URL изображения, которыйнаходится как показано ниже, но для всех отдельных coffee_pages на исходной странице.Он должен быть достаточно общим, чтобы использовать этот источник изображения, но не более того.Я пробовал несколько различных селекторов CSS, но все тянет или ноль или пусто.

<img src="//cdn.shopify.com/s/files/1/2220/0129/products/ceremony-product-gummy-bears_480x480.jpg?v=1551455589" alt="Burundi Kiryama" data-product-featured-image style="display:none">

Страница кофе, на которой я сейчас нахожусь: https://shop.ceremonycoffee.com/products/burundi-kiryama

1 Ответ

0 голосов
/ 24 марта 2019

Вам нужно изменить

bean.image_url = coffee_page.css('img data-featured-product-image').attr('src')

на

bean.image_url = coffee_page.css('#mobile-only>img').attr('src')

Если вы можете, всегда используйте близлежащие идентификаторы, чтобы найти элемент, к которому вы хотите получить доступ.

...