кодек не может закодировать символ python3 - PullRequest
1 голос
/ 05 ноября 2019

Я хочу почистить имя и цену с этого сайта:

https://www.flipkart.com/laptops/~buyback-guarantee-on-laptops-/pr?sid=6bo%2Cb5g&uniqBStoreParam1=val1&wid=11.productCard.PMU_V2

И имя, и цена находятся в пределах div тегов.

Имя:

enter image description here

Цена

enter image description here

Печать имени работает нормально, но печать Цена дает мне ошибку:

Traceback (most recent call last):
  File "c:\File.py", line 37, in <module>
    print(price.text)
  File "C:\Python37\lib\encodings\cp1252.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u20b9' in position 0: character maps to <undefined>

Код:

from selenium import webdriver
from bs4 import BeautifulSoup
import pandas as pd
import requests

response = requests.get("https://www.flipkart.com/laptops/~buyback-guarantee-on-laptops-/pr?sid=6bo%2Cb5g&uniq")
soup = BeautifulSoup(response.text, 'html.parser')
for a in soup.findAll('a',href=True, attrs={'class':'_31qSD5'}):
    name=a.find('div', attrs={'class':'_3wU53n'})
    price=a.find('div', attrs={'class':'_1vC4OE _2rQ-NK'})
    print(name.text)

enter image description here

В чем разница между ними?

Так почему один из них дает мне ошибку, а другой нет?

1 Ответ

1 голос
/ 06 ноября 2019

Это ошибка, потому что у python проблемы с этим знаком валюты. Знак индийской рупии интерпретируется по-разному в зависимости от языка и по умолчанию отсутствует в кодировке python. Если мы изменим ваш последний оператор печати на print(str(price.text.encode("utf-8"))), мы получим результаты, которые выглядят следующим образом:

b'\xe2\x82\xb961,990' b'\xe2\x82\xb940,000' b'\xe2\x82\xb963,854' b'\xe2\x82\xb934,990' b'\xe2\x82\xb948,990' b'\xe2\x82\xb952,990' b'\xe2\x82\xb932,990' b'\xe2\x82\xb954,990' b'\xe2\x82\xb952,990'

Так как этот вывод не очень хорош и, вероятно, не пригоден для использования,Я бы лично обрезал этот символ перед печатью. Если вы действительно хотите, чтобы python печатал символ индийской рупии, вы можете добавить его к своей карте. Выполните следующие действия, начиная с этого поста , чтобы добавить настройки в charmap.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...