Saya mencoba mengikis situs web, tetapi itu memberi saya kesalahan.
Saya menggunakan kode berikut:
import urllib.request
from bs4 import BeautifulSoup
get = urllib.request.urlopen("https://www.website.com/")
html = get.read()
soup = BeautifulSoup(html)
print(soup)
Dan saya mendapatkan kesalahan berikut:
File "C:\Python34\lib\encodings\cp1252.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode characters in position 70924-70950: character maps to <undefined>
Apa yang bisa saya lakukan untuk memperbaikinya?
python
beautifulsoup
urllib
SstrykerR
sumber
sumber
Aku tetap dengan menambahkan
.encode("utf-8")
kesoup
.Itu artinya
print(soup)
menjadiprint(soup.encode("utf-8"))
.sumber
bytes
objek, yang akan mencetak sebagai kekacauan\x
urutan jika ada banyak teks yang dikodekan UTF-8. Saya sarankan menggunakanwin_unicode_console
, seperti yang disarankan @JFSebastian.b'\x02x\xc2\xa9'
(objek byte) sebagai gantinyaprint(soup.encode("utf-8"))
bekerja untuk saya, tetapi sebelum itu saya juga harus menambahkanwith open("f_name", encoding="utf-8") as f: soup = BeautifulSoup(f, "html.parser")
Dalam Python 3.7, dan menjalankan Windows 10 ini berhasil (saya tidak yakin apakah itu akan bekerja pada platform lain dan / atau versi Python lainnya)
Mengganti baris ini:
with open('filename', 'w') as f:
Dengan ini:
with open('filename', 'w', encoding='utf-8') as f:
Alasan mengapa itu bekerja adalah karena pengkodean diubah menjadi UTF-8 saat menggunakan file, sehingga karakter dalam UTF-8 dapat dikonversi ke teks, bukannya mengembalikan kesalahan ketika bertemu dengan karakter UTF-8 yang tidak didukung oleh pengkodean saat ini.
sumber
Saat menyimpan respons permintaan dapatkan, kesalahan yang sama dilemparkan ke Python 3.7 pada jendela 10. Respons yang diterima dari URL, penyandian adalah UTF-8 sehingga selalu disarankan untuk memeriksa penyandian agar hal yang sama dapat dilewatkan untuk menghindari masalah sepele seperti itu. karena benar-benar membunuh banyak waktu dalam produksi
Ketika saya menambahkan encoding = "utf-8" dengan perintah terbuka itu menyimpan file dengan respons yang benar
sumber
Bahkan saya menghadapi masalah yang sama dengan pengkodean yang terjadi ketika Anda mencoba mencetaknya, membaca / menulis atau membukanya. Seperti yang disebutkan di atas, menambahkan .encoding = "utf-8" akan membantu jika Anda ingin mencetaknya.
Jika Anda mencoba membuka data yang tergores dan mungkin menulisnya ke dalam file, kemudian buka file dengan (......, encoding = "utf-8")
sumber
Bagi mereka masih mendapatkan kesalahan ini, menambahkan
encode("utf-8")
untuksoup
juga akan memperbaiki hal ini.sumber
soup
bukan lagiBeautifulSoup
objek setelah Anda melakukan ini sehingga tidak dapat dimanipulasi atau dicari