Форум программистов, компьютерный форум, киберфорум
Ruby
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 22.03.2016
Сообщений: 4

Ошибка в коде. Нужно выявить!

02.08.2019, 00:14. Показов 2318. Ответов 2
Метки ruby (Все метки)

Студворк — интернет-сервис помощи студентам
В таблице должны появляться значения после парсинга сайта, но ячейки пустые,
кто-нибудь разбирается?
Чтобы запустить, вводите:
Bash
1
ruby t.rb https://www.petsonic.com/snacks-huesos-para-perros/ products.csv
Ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# подключаем необходимые либы
require 'open-uri'
require 'nokogiri'
require 'csv'
 
# получаем данные от пользователя из параметров
# пример запуска ruby t.rb https://www.petsonic.com/snacks-huesos-para-perros/ products.csv
 
# линка на категорию
url_category = ARGV.first
# имя файла в который будем записывать данные
file_name = ARGV.last
 
# парсим страницу с товарами
main_category_page = Nokogiri::HTML(open(url_category))
 
# разбиваем данные на отдельные товары
list_products = main_category_page.css('div.ajax_block_product')
 
# указываем пустой массив(в него будем записывать урлы на товары)
all_products_url = []
 
# проходимся по всем товарам
list_products.each do |product|
  # парсим урл товара и добавляем в массив
  all_products_url << product.css('div.left-block').css('a.product_img_link').at('a')['href']
end
  
# открываем файл csv и указываем обозначения столбцов
CSV.open(file_name, "wb") do |csv_line|
  csv_line << ['Название', 'Цена', 'Изображение']
 
  # теперь проходимся оп массиву с урлами на товары
  all_products_url.each do |product_url|
 
    # парсим страницу с товаром
    product_page = Nokogiri::HTML(open(product_url))
 
    # название продукта
    product_name = product_page.css('div.product-name').css('h1 > text()').to_s
 
    # изображение продукта
    product_img = product_page.css('span#view_full_size').css('img#bigpic').at('img')['src']
 
    #  парсим вариации весовки товара
    attribute_product_list = product_page.css('fieldset.attribute_fieldset').css('ul.attribute_labels_lists')
 
    # проходимся по каждой весовке
    attribute_product_list.each do |attr|
      # весовка продукта
      product_pre_packing = attr.xpath('//span[@class="attribute_name"]').text
 
      # цена продукта для данной весовки
      product_price = attr.xpath('//span[@class="attribute_price"]')
 
      # собираем строку с информацией о продукте по шаблону из задания
      full_info = ["#{product_name} - #{product_pre_packing}", product_price, product_img]
 
      # пишем собранные данные в наш файл
      csv_line << full_info
    end
  end
end
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.08.2019, 00:14
Ответы с готовыми решениями:

Выявить ошибку в коде
Условие: Едет поезд с точки А в точку Б со скоростью v1, обратно ( от Б до А) со скорость v2.Необходимо узнать Среднюю скорость на всём...

Выявить ошибку в коде.
Проблема с процедурой draw пишет что ожидался оператор а не процедура const szw = 70; // размер лабиринта szh = 50; cellsz...

Выявить ошибку в коде
Написать функцию вычисления суммы ряда y=sinx-(sin2x)/2+… +(-1)n+1sin(nx)/n с точностью до eps=0.001. В качестве параметров передать x...

2
the hardway first
Эксперт JS
 Аватар для j2FunOnly
2475 / 1847 / 910
Регистрация: 05.06.2015
Сообщений: 3,610
02.08.2019, 10:23
Лучший ответ Сообщение было отмечено alexissa как решение

Решение

Цитата Сообщение от alexissa Посмотреть сообщение
Ruby
1
2
# разбиваем данные на отдельные товары
list_products = main_category_page.css('div.ajax_block_product')
Внимательно перепроверьте разметку документа, там нет элементов подходящих под ваш селектор div.ajax_block_product, там элементы списка li.ajax_block_product


Остальные селекторы тоже проверьте
2
0 / 0 / 0
Регистрация: 22.03.2016
Сообщений: 4
02.08.2019, 16:54  [ТС]
Теперь все круто, код поменял. Вот рабочий:

Кликните здесь для просмотра всего текста
Ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# подключаем необходимые либы
require 'open-uri'
require 'nokogiri'
require 'csv'
 
# получаем данные от пользователя из параметров
# пример запуска ruby t.rb https://www.petsonic.com/snacks-huesos-para-perros/ products.csv
 
# линка на категорию
url_category = ARGV.first
# имя файла в который будем записывать данные
file_name = ARGV.last
 
# парсим страницу с товарами
main_category_page = Nokogiri::HTML(open(url_category))
 
# разбиваем данные на отдельные товары
list_products = main_category_page.css('li.ajax_block_product')
 
# указываем пустой массив(в него будем записывать урлы на товары)
all_products_url = []
 
# проходимся по всем товарам
list_products.each do |product|
  # парсим урл товара и добавляем в массив
  all_products_url << product.css('a.product_img_link').at('a')['href']
end
 
# открываем файл csv и указываем обозначения столбцов
CSV.open(file_name, "wb") do |csv_line|
  csv_line << ['Название', 'Цена', 'Изображение']
 
  # теперь проходимся оп массиву с урлами на товары
  all_products_url.each do |product_url|
 
    # парсим страницу с товаром
    product_page = Nokogiri::HTML(open(product_url))
 
    # название продукта
    product_name = product_page.css('h1.product_main_name').css('h1 > text()').to_s
 
    # изображение продукта
    product_img = product_page.css('span#view_full_size').css('img#bigpic').at('img')['src']
 
    #  парсим вариации весовки товара
    attribute_product_list = product_page.css('ul.attribute_radio_list')
 
    # проходимся по каждой весовке
    attribute_product_list.each do |attr|
      # весовка продукта
      product_pre_packing = attr.xpath('//span[@class="radio_label"]').text
 
      # цена продукта для данной весовки
      product_price = attr.xpath('//span[@class="price_comb"]').text
 
      # собираем строку с информацией о продукте по шаблону из задания
      full_info = ["#{product_name} - #{product_pre_packing}", product_price, product_img]
 
      # пишем собранные данные в наш файл
      csv_line << full_info
    end
  end
end


И если не трудно, помогите еще решить вопрос такого характера - все весовки и цены привязанные к ним должны переноситься в новую строчку,
как отдельный тавар с тем же названием. Есть варианты?
Миниатюры
Ошибка в коде. Нужно выявить!  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.08.2019, 16:54
Помогаю со студенческими работами здесь

В коде есть ошибка,нужно ее ликвидировать
txt segment assume cs:txt, ds:data myproc proc mov ax, data mov ds, ax mov cx, 223 mov si, 0 mov al, 255 ...

Ошибка в коде: задание z=x+k(x+1)y k=3,45 нужно вычислить..x
Простое задание z=x+k(x+1)y k=3,45 нужно вычислить..x и y ввести с клавиатуры.. посмотрите на код #include &quot;stdio.h&quot; ...

Из 3 чисел нужно выявить максимальное
Из 3 чисел нужно выевить максимальное, при этом дать свои значения. я ввел такие команды INPUT &quot;CHISLO X&quot;;X INPUT...

Нужно выявить логическую ошибку в программе
Кто-нибудь может посмотреть мою программу, где там логическая ошибка? Небольшая консольная программа с использованием LINQ

Очень нужно осознать, в чем ошибка в коде на Prolog?
Задача состоит в следующем: 1. Описать на Прологе базу знаний «Правители России», содержащую следующие факты: -Ярослав Мудрый правил с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru