Я пытаюсь сделать скребки для нескольких сайтов, но я столкнулся с проблемой для одного конкретного сайта. При проверке цены десятичный знак показывает "56", но когда я загружаю HTML с помощью BeautifulSoup, он возвращает 16. Эта же проблема возникает и для других продуктов.
Ниже вы можете увидеть мой код:
from bs4 import BeautifulSoup
import requests
myProxy = {"http" : "http://10.120.118.49:8080", "https" :
"https://10.120.118.49:8080"}
url = 'https://shop.rewe.de/coca-cola-4x1-5l/PD6731201'
page = requests.get(url, proxies = myProxy)
soup = BeautifulSoup(page.text, 'html.parser')
predecimal = soup.find('span', attrs={'class': 'pd-price__predecimal'})
predec = predecimal.text.strip()
separator = soup.find('span', attrs={'class': 'pd-price__separator'})
sep = separator.text.strip()
decimal = soup.find('span', attrs={'class': 'pd-price__decimal'})
dec = decimal.text.strip()
price = str(predec) + str(sep) + str(dec)
print(price)
Вышеприведенный код возвращает 5,16, тогда как цена, указанная на веб-сайте, составляет 5,56. Для некоторых других сайтов я успешно использовал Selenium вместо этого, но в этом случае он все равно возвращает тот же номер. Любая помощь будет принята с благодарностью!
Как уже упоминалось, я также пробовал с Selenium, используя следующий код:
driver.get('https://shop.rewe.de/coca-cola-4x1-5l/PD6731201')
xpath = '//*[@class="pd-PriceInformation"]/mark'
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, xpath)))
price = driver.find_elements_by_xpath(xpath)
for p in price:
print(p.text)
Это возвращает "ab 5, 16 €", поэтому в основном то же самое, что и при использовании BeautifulSoup. При попытке использовать тот же код для веб-сайта https://shop.rewe.de/vio-bio-limo-orange-4x1l/PD2455462 он вместо этого возвращает "ab 5, 96 €", что также неверно, так как цена 5, 56 в этом случае.
5,56
просто в кеше вашего браузера, потому что они только начали продажи сегодня или что-то в этом роде?