Я новичок в программировании и пытаюсь создать свой первый небольшой веб-сканер на python.
Цель: Сканирование страницы со списком товаров – получение названия бренда, названия статьи, исходной цены и новой цены – сохранение в CSV-файле.
Статус: мне удалось получить название бренда, название артикула, а также первоначальную цену и расположить их в правильном порядке в списке (например, 10 продуктов). Поскольку для всех товаров есть название бренда, описание и цена, мой код заносит их в CSV в правильном порядке.
Код:
import bs4
from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup
myUrl = 'https://www.zalando.de/rucksaecke-herren/'
#open connection, grabbing page, saving in page_html and closing connection
uClient = uReq(myUrl)
page_html = uClient.read()
uClient.close()
#Datatype, html paser
page_soup = soup(page_html, "html.parser")
#grabbing information
brand_Names = page_soup.findAll("div",{"class": "z-nvg-cognac_brandName-2XZRz z-nvg-cognac_textFormat-16QFn"})
articale_Names = page_soup.findAll ("div",{"class": "z-nvg-cognac_articleName--arFp z-nvg-cognac_textFormat-16QFn"})
original_Prices = page_soup.findAll("div",{"class": "z-nvg-cognac_originalPrice-2Oy4G"})
new_Prices = page_soup.findAll("div",{"class": "z-nvg-cognac_promotionalPrice-3GRE7"})
#opening a csv file and printing its header
filename = "XXX.csv"
file = open(filename, "w")
headers = "BRAND, ARTICALE NAME, OLD PRICE, NEW PRICE\n"
file.write(headers)
#How many brands on page?
products_on_page = len(brand_Names)
#Looping through all brands, atricles, prices and writing the text into the CSV
for i in range(products_on_page):
brand = brand_Names[i].text
articale_Name = articale_Names[i].text
price = original_Prices[i].text
new_Price = new_Prices[i].text
file.write(brand + "," + articale_Name + "," + price.replace(",",".") + new_Price.replace(",",".") +"\n")
#closing CSV
file.close()
Проблема: мне не удается вставить цены со скидкой в CSV-файл в нужном месте. Не у каждого товара есть скидка, и в настоящее время я вижу две проблемы с моим кодом:
Я использую .findAll для поиска информации на веб-сайте — поскольку товаров со скидкой меньше, чем всего товаров, мой new_Prices содержит меньше цен (например, 3 цены на 10 товаров). Если бы я мог добавить их в список, я предполагаю, что они появятся в первых трех строках. Как я могу убедиться, что новые_цены добавлены в правильные продукты?
Я получаю сообщение «Ошибка индекса: индекс списка вне диапазона». Я предполагаю, что это вызвано тем, что я перебираю 10 продуктов, однако для new_Prices я достигаю конца быстрее, чем для других моих списков? Имеет ли это смысл и верно ли мое предположение?
Я очень ценю любую помощь.
Благодарить,
Торстен
z-nvg-cognac_infoContainer-MvytX
. Вы можете выбрать товары по'.z-nvg-cognac_infoContainer-MvytX'
, а затем найти марку, артикул, цену, новую цену (или нет) - person t.m.adam   schedule 06.11.2017