Я извлекаю название товара, если он является бестселлером, что это за одежда, сколько цветов в наличии и цена. Все извлекается по той же ссылке с BeautifulSoup.
Код: Выделить всё
for item in items:
name = item.find('a', class_ = 'product-card__link-overlay').text.strip()
try:
special_tag = item.find('div', class_ = 'product-card__messaging accent--color').text.strip()
except:
special_tag = '/'
productclass = item.find('div', class_ = 'product-card__subtitle').text.strip()
colours = item.find('div', class_ = 'product-card__product-count').text.strip()
try:
price = item.find('div', class_ = 'product-price us__styling is--current-price css-11s12ax').text.strip()
except:
price = item.find('div', class_ = 'product-price is--current-price css-1ydfahe').text.strip()
product = {'name':name, 'special':special_tag, 'class':productclass, 'colours':colours, 'price':price}
sh.append_row([str(product['name']),str(product['special']),str(product['class']),str(product['colours']),str(product['price'])])
Код: Выделить всё
time.sleep(3)
previous_height = driver.execute_script('return document.body.scrollHeight')
while True:
driver.execute_script('window.scrollTo(0,document.body.scrollHeight);')
time.sleep(3)
new_height = driver.execute_script('return document.body.scrollHeight')
if new_height == previous_height:
page_source = driver.page_source
break
previous_height = new_height
Весь код только для справки:
Код: Выделить всё
from bs4 import BeautifulSoup
import gspread
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
gc = gspread.service_account(filename='creds.json')
sh = gc.open('Nike catalog').sheet1
driver.get('https://www.nike.com/w/mens-clothing-6ymx6znik1')
#Scroll program
time.sleep(3)
previous_height = driver.execute_script('return document.body.scrollHeight')
while True:
driver.execute_script('window.scrollTo(0,document.body.scrollHeight);')
time.sleep(3)
new_height = driver.execute_script('return document.body.scrollHeight')
if new_height == previous_height:
page_source = driver.page_source
break
previous_height = new_height
#Main program
baseurl='https://www.nike.com/w/mens-clothing-6ymx6znik1'
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36'}
soup = BeautifulSoup( page_source,'lxml')
items = soup.find_all('div', class_ = 'product-card__body')
#HTML parser
for item in items:
name = item.find('a', class_ = 'product-card__link-overlay').text.strip()
try:
special_tag = item.find('div', class_ = 'product-card__messaging accent--color').text.strip()
except:
special_tag = '/'
productclass = item.find('div', class_ = 'product-card__subtitle').text.strip()
colours = item.find('div', class_ = 'product-card__product-count').text.strip()
try:
price = item.find('div', class_ = 'product-price us__styling is--current-price css-11s12ax').text.strip()
except:
price = item.find('div', class_ = 'product-price is--current-price css-1ydfahe').text.strip()
product = {'name':name, 'special':special_tag, 'class':productclass, 'colours':colours, 'price':price}
sh.append_row([str(product['name']),str(product['special']),str(product['class']),str(product['colours']),str(product['price'])])
Я не знаю, как это исправить. Кто-нибудь сталкивался с такой же проблемой или имел опыт в чем-то подобном? Если вы это сделаете, мы будем очень признательны, если вы сможете решить эту проблему. Заранее спасибо.
Подробнее здесь: https://stackoverflow.com/questions/792 ... ets-proble