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₽', '有 Ozon 卡', '1\u2009187\u2009₽', '4\u2009290\u2009₽', '没有 Ozon 卡']
1,151 卢布
持臭氧卡
1,187 卢布
4,290 卢布
无臭氧卡
问题在于同样的价值不同,即产品本身的价格标签。例如,如果你只是打印它会显示“1,151 ₽”,如果你把它放在一个列表或变量中它会看起来像“1\u2009151\u2009₽”我也尝试过BeatifulSoup,结果是一样的。
这可能与什么有关以及可以采取什么措施?
看,读一下 unicode 符号是什么,在这种情况下,在 ozon 页面上,价格是使用符号 U+2009(数字之间的空格)编写的,在 python 中,unicode 符号是这样写的 - \u 和符号代码,即您实际看到的是,\u2009,您使用 split 创建一个列表,使用 \n 分隔符,当您打印该列表时,列表元素显示在python 形式,当您单独输出它们时,您的命令 shell 以正确的形式显示它们,这就是结果不一致的原因。
以下代码将从价格中删除 \u2009 字符:
一般来说,最好先学习语言的基础知识,然后再编写解析器。