Здравствуйте, я не часто что то пишу на питоне, да и познания мои не далеко ушли за программу 10 класса.
Недавно мне понадобилось изучить вопрос парсинга. Целью парсинга сайт головоломок, собираю название товара, цену, цвет(из за цвета меняется цена на товар), артикул товара.
Использую Webdriver для того что бы получить центу товара которая обновляется после клика на цвет товара.
BeautifullSoup
А так же на Import'ил много лишнего когда разбирался с капчей или кодировкой текстового файла.
Суть проблемы в том что я делаю генератор ценников что бы часто меняющиеся цены не усложняли работу продавца(моего друга, для него делаю)
На 80 строке сравниваю значения в дб с теми что спарсил что бы заменить их, а так же отправить на генерацию ценника.:
result = cursor.fetchone()
print(result['ART'], result['Cost'], result['Color'])
If( article == result["ART"] and colorofcube == result["Color"] and priceofcube != result["Cost"] ):
cursor.execute(changeprice, (Cost, ART, Color))
print(nameofcube, ' Изменил цену с ', result['Cost'], " на ", priceofcube)
cursor.execute(changeprice, (Cost, ART, Color))
elif(article == result["ART"] and colorofcube == result["Color"] and priceofcube == result["Cost"]):
print("Ничего не изменилось")
Проверяю с помощью if соответствие артикуля цвета и цены, но вот конструкция находится в Try из за чего все ломается
Моих познаний не хватает что бы понять что сделать, в чем проблема.
Код:
from ast import If
from unittest import result
import requests
from bs4 import BeautifulSoup
import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import io
import codecs
import time
import pymysql
conn = pymysql.connect(host='', port=3306,
user='', passwd='', db='')
cursor = conn.cursor()
page=1
options = webdriver.ChromeOptions()
options.add_argument('--ignore-certificate-errors-spki-list')
options.add_argument('--ignore-ssl-errors')
browser = webdriver.Chrome('C:\webdr\chromedriver.exe')
codecs = ["cp1252", "cp437", "utf-16be", "utf-16"]
while page<=18:
src = requests.Session()
src.max_redirects = 5000
r = src.get("https://cccstore.ru/catalog/kubiki-rubika/all/?PAGEN_1="+str(page), allow_redirects=True)
r.encoding = 'utf8'
soup = BeautifulSoup(r.text, 'html.parser')
element = soup.find_all('div', class_='card_v2-product')
if(len(element)):
for elem in element:
pages2 = str(page)
f=io.open("spisok"+pages2+".txt", 'a+', encoding="utf-8")
price = elem.find('div', 'card_v2-product-price').text+'\n'
links=elem.find('a', class_='')
linkss = links.get('href')
titles = '\n'+elem.find('div', 'card_v2-product-name').text.strip()
g=src.get("https://cccstore.ru"+str(linkss), allow_redirects=True)
g.encoding = 'utf8'
sp=BeautifulSoup(g.text, 'html.parser')
inf=sp.find_all('div', class_='detail-row-content')
browser.get("https://cccstore.ru"+str(linkss))
for info in inf:
selen = browser.find_elements(By.CLASS_NAME , "detail-offers-item")
nameofcube=info.find('div','cccstore-header').text.strip()
article=info.find('div', 'detail-header-article').text
print(nameofcube+'\n')
f.write(nameofcube+'\n')
for sel in selen:
sel.click()
time.sleep(0.5)
priceofcube=browser.find_element(By.CLASS_NAME, "detail-price-current").text.replace(" ", "")[:-1]
colorofcube=browser.find_element(By.CLASS_NAME, "detail-offers_type_name-value").text
try:
inshowroom=browser.find_element(By.CLASS_NAME, "detail-remainders-info").text
except Exception:
inshowroom="0"
if(inshowroom == "Также в наличии в шоуруме"):
inshowroom="1"
else:
inshowroom="0"
print(priceofcube +" "+ colorofcube+'\n')
f.write(priceofcube +" "+ colorofcube+" "+inshowroom+'\n')
def ADD(ART, Name, Cost, Color, InShowRoom):
conn = pymysql.connect(host='remotemysql.com', port=3306, user='', passwd='', db='',cursorclass=pymysql.cursors.DictCursor)
try:
with conn.cursor() as cursor:
selecter="SELECT ART, Cost, Color FROM cccstore WHERE ART = %s AND Color = %s"
changeprice="UPDATE cccstore SET Cost = %s WHERE ART = %s AND Color = %s"
cursor.execute(selecter, (article, colorofcube))
try:
result = cursor.fetchone()
print(result['ART'], result['Cost'], result['Color'])
If( article == result["ART"] and colorofcube == result["Color"] and priceofcube != result["Cost"] ):
cursor.execute(changeprice, (Cost, ART, Color))
print(nameofcube, ' Изменил цену с ', result['Cost'], " на ", priceofcube)
cursor.execute(changeprice, (Cost, ART, Color))
elif(article == result["ART"] and colorofcube == result["Color"] and priceofcube == result["Cost"]):
print("Ничего не изменилось")
finally:
print("Такого товара нет в базе данных", Exception)
# sql = "INSERT INTO cccstore (`ART`, `Name`, `Cost`, `Color`, `InShowRoom`) VALUES (%s, %s, %s, %s, %s)"
# cursor.execute(sql, (ART, Name, Cost, Color, InShowRoom))
conn.commit()
except Exception:
conn.close()
ADD(article, nameofcube, priceofcube, colorofcube, inshowroom)
time.sleep(0.5)
print(article+'\n')
f.write(article+'\n\n')
page +=1
pages = str(page)
Ошибки:
Заранее извиняюсь если ошибка максимально простая, а я не заметил