Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
383 / 23 / 2
Регистрация: 12.06.2021
Сообщений: 211
Записей в блоге: 2

Как сделать проверку на странице карточки товара, прежде чем добавить эту ссылку в Workbook?

24.05.2022, 18:44. Показов 964. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, запускаю парсер, чтобы собрать данные с одного тестового сайта. Мой парсер сначала собирает ссылки, потом заходит по этим ссылками и в карточки товара забирают цену. Потом, эту цену выводит через print. Мне не нужно сохранять все ссылки в файл, только выбранные, например там где присутствует только цена $24.99. Вообщем нужно как-то сделать сравнение с ценой и сохранить ссылку в Workbook. Последовательность действий.
  1. Спарсить все ссылки с сайта.
  2. Перейти по ним на страницу
  3. Забрать цену
  4. Сравнить её с $24.99
  5. Ссылки с карточками товара где есть эта цена сохранить.

P.S. Разумеется в каталоге так же указаны, цены и можно сравнить там. Но мая задача именно выполнить переход на страницу с полным описанием и сделать сравнение в самой карточки товара, а потом уже сохранять эту ссылку.

Подскажите как это сделать? Вот мой код:
Python
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
64
65
66
67
68
69
70
71
72
73
74
75
import requests
from bs4 import BeautifulSoup
 
from time import sleep
 
import lxml
import xlsxwriter
 
 
 
import re
 
headers = {
  "Accept":"*/*",
  "User-Agent": "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36"
}
 
 
storage_number = 1
image_number = 1
max_pages = 2
list_card_url = []
 
book = xlsxwriter.Workbook(r"data2/data2.xlsx")
page = book.add_worksheet("товар")
  
row = 0
column = 0
  
page.set_column("A:A",20)
page.set_column("B:B",20)
page.set_column("C:C",50)
page.set_column("D:D",50)
 
for storage in range(max_pages):
  current_url = f'https://scrapingclub.com/exercise/list_basic/?page={storage_number}'
  raw_html = requests.get(current_url, headers)
  soup = BeautifulSoup(raw_html.text,'lxml')
  title = soup.title
  
  all_data = soup.find("div",class_="row my-4")
  li1 = all_data.find_all("div",class_="col-lg-4 col-md-6 mb-4")
  
 
  
  for item in li1:
   
    
    link = item.find("h4",{"class":"card-title"}).find("a").get("href")
    list_card_url.append('https://scrapingclub.com'+link)
    
    
    image_number += 1
    
   
    
    print(f'{image_number}  {link} save!')
  print(f"page={storage_number}") 
  
 
    
  if storage_number == max_pages:
     print("Working completed")
     break  
  storage_number += 1
 
for full_data in list_card_url:
  response = requests.get(full_data,headers=headers)
  sleep(1)
  soup = BeautifulSoup(response.text,"lxml")
  data = soup.find("div",class_="card mt-4 my-4").find("h4").text
  page.write(row, column, data)
 
  print(data)
book.close()
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.05.2022, 18:44
Ответы с готовыми решениями:

Как вывести ссылку на категорию товара на странице товара?
Товар у меня это bitrix::catalog.element Категория - это у меня Рабочий стол - Контент - Каталоги - Входные двери - Каталог входных...

ADO/RDS прежде чем сделать запрос выдается сообщение 'Разрешить странице доступ к данным в другом домене'
Все знающий Народ. Помогите. Вот какая штука. Клиентскими скриптами подключаюсь к SQL и пытаюсь сделать запрос. Все вроде бы...

Добавить проверку в программу на простые числа, чтобы программа работала как прежде без ошибок
#define DATA_1_PIN 10 // пин данных для первого регистра #define DATA_2_PIN 13 // пин данных для второго регистра #define...

3
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
30.05.2022, 04:03
а что не так с ценой на странице, почему нужно заходить внутрь, чтобы сравнить цену?

Добавлено через 18 минут
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import requests
from bs4 import BeautifulSoup
 
host = 'https://scrapingclub.com'
max_pages = 7
 
for page in range(1, max_pages+1):
    print(f'Page: {page}')
 
    url = f'{host}/exercise/list_basic/?page={page}'
    html = requests.get(url)
    soup = BeautifulSoup(html.content, "html.parser")
    cards = soup.select('div.row.my-4 div.card')
 
    for card in cards:
        if card.select_one('h5').text == '$24.99':
            a = card.select_one('h4.card-title a')
            print(f'{host}{a.attrs.get("href")}', a.text)
0
383 / 23 / 2
Регистрация: 12.06.2021
Сообщений: 211
Записей в блоге: 2
30.05.2022, 21:14  [ТС]
а что не так с ценой на странице, почему нужно заходить внутрь, чтобы сравнить цену?
.
Этот пример я взяла в качестве, теста. Позже я буду использовать другие сайты, там будет не вся информация, в каталоге а только часть, поэтому придется делать переход по странице, чтобы сравнить. Например на имя автора или соответствует содержимое div контейнера с тем которое в условии.
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
31.05.2022, 01:04
Лучший ответ Сообщение было отмечено Olga28 как решение

Решение

Python
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
import requests
from bs4 import BeautifulSoup
 
host = 'https://scrapingclub.com'
max_pages = 7
 
for page in range(1, max_pages+1):
 
    url = f'{host}/exercise/list_basic/?page={page}'
    html = requests.get(url)
    soup = BeautifulSoup(html.content, "html.parser")
    cards = soup.select('div.row.my-4 div.card')
 
    for idx, card in enumerate(cards, 1):
        card_data = card.select_one('h4.card-title a')
        title = card_data.text
        href = card.select_one('h4.card-title a').attrs.get("href")
        card_url = f'{host}{href}'
 
        print(f'Checking page {page}, card {idx} ({title})')
        
        card_req = requests.get(card_url)
        card_soup = BeautifulSoup(card_req.content, "html.parser")
        price = card_soup.select_one('div.card-body h4').text
        
        if price == '$24.99':
            print(f'\t{title} is {price}, url: {host}{href}')
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.05.2022, 01:04
Помогаю со студенческими работами здесь

Как добавить определенное поле из карточки товара в поиск на сайте
Добрый день. Извините, если такой вопрос уже был. Такая ситуация. Выгружаю товары из 1с розница на сайт и столкнулся с такой проблемой,...

как сделать проверку нажатия на ссылку
Всем привет, мне нужно сделать проверку нажатия на ссылку, что бы при нажатии на ссылку исполнялся php код.

Как сделать, чтобы вплывающее окно прежде,чем попасть в куки вывелось ДВА раза?
Здравствуйте. Есть код всплывающего окна с id="overlay2". Сюда писать его не буду. Просто поясню, что при заходе на сайт с задержкой в...

Как сделать ссылку отправки товара в корзину?
Здравствуйте, есть такая ссылка :<a href="korzina.php?id=<?=$row?>">. она работает только каждый рас выкидывает на саму корзину....

Woocommerce как сделать прямую ссылку товара?
Здравствуйте, делаю магазин мобильных пресетов, суть в том, что бы человек когда оплачивает товар, после оплаты 1. в личном кабинете...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru