Различные значения при парсинге ozon
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium_stealth import stealth
import time
arts = [
'840055507'
]
cards = []
def saveCardInfo(art):
cst = driver.find_element(By.CSS_SELECTOR,"div[data-widget^='webPrice']")
print(cst.text.split('\n'))
print(cst.text)
def initDriver():
driver = webdriver.Chrome()
stealth(driver,
platform="Win32")
return driver
driver = initDriver()
driver.get('https://www.ozon.ru/')
for art in arts:
time.sleep(1)
srch_inp = driver.find_element(By.TAG_NAME, 'input')
srch_inp.send_keys(f"{art}\n")
saveCardInfo(art)
driver.quit()
Код выше парсит определенные товары на озоне. Есть проблемы с получением цены товара: При выполнении кода выводит следующее:
['1\u2009151\u2009₽', 'c Ozon Картой', '1\u2009187\u2009₽', '4\u2009290\u2009₽', 'без Ozon Карты']
1 151 ₽
c Ozon Картой
1 187 ₽
4 290 ₽
без Ozon Карты
Проблема заключается в том, одни и те же значения различаются, а именно сам ценник товара. К примеру, если просто принтить то выведет - "1 151 ₽",а если это заносить в список или переменную будет выглядеть как '1\u2009151\u2009₽'.Пробовал еще BeatifulSoup, результат тот же
С чем это может быть связано и что с этим можно сделать?
Ответы (1 шт):
Смотри, прочитай что такое символы unicode, в данном случае на странице ozon цены записаны с использованием символов U+2009(пустое пространство между цифрами), в python символы unicode записываются вот так -- \u ну и код символа, что ты и видишь собственно, \u2009, ты создаешь список с помощью split, по разделителю \n, и когда ты принтишь список, то элементы списка выводятся в python-овском виде, а когда выводишь по отдельности, твоя командная оболочка, выводит их в правильном виде, поэтому и получается разнобой.
Вот код, который уберет символ \u2009 из цен:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium_stealth import stealth
import time
arts = [
'840055507'
]
cards = []
def saveCardInfo(art):
cst = driver.find_element(By.CSS_SELECTOR,"div[data-widget^='webPrice']")
cst_text = cst.text.replace('\u2009', '') # это убирает unicode символ из всего распарсенного тобой текста
# можно вместо этого символа вставить пробел, тогда вот так должно быть для этого:
#cst_text = cst.text.replace('\u2009', ' ')
# используя ту же конструкцию .replace, ты можешь заменить символ ₽ на что-нибудь другое или убрать его, например, чтобы убрать, закоменти ту строку и вставь эту:
#cst_text = cst_text = cst.text.replace('\u2009', '').replace('₽', '')
print(cst_text.split('\n'))
print(cst_text)
def initDriver():
driver = webdriver.Chrome()
stealth(driver,
platform="Win32")
return driver
driver = initDriver()
driver.get('https://www.ozon.ru/')
for art in arts:
time.sleep(1)
srch_inp = driver.find_element(By.TAG_NAME, 'input')
srch_inp.send_keys(f"{art}\n")
saveCardInfo(art)
driver.quit()
Да и вообще лучше подучи для начала основы языка, а потом пиши парсеры.