UnicodeDecodeError: кодек "utf8" не может декодировать байт 0xc3 в позиции 34: неожиданный конец данных
Я пытаюсь написать Забияка, но у меня проблемы с кодировкой. Когда я попытался скопировать строку, которую я искал в свой текстовый файл,python2.7
сказал мне, что он не распознает кодировку, несмотря на отсутствие специальных символов. Не знаю, полезная ли это информация.
мой код выглядит так:
from urllib import FancyURLopener
import os
class MyOpener(FancyURLopener): #spoofs a real browser on Window
version = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11'
print "What is the webaddress?"
webaddress = raw_input("8::>")
print "Folder Name?"
foldername = raw_input("8::>")
if not os.path.exists(foldername):
os.makedirs(foldername)
def urlpuller(start, page):
while page[start]!= '"':
start += 1
close = start
while page[close]!='"':
close += 1
return page[start:close]
myopener = MyOpener()
response = myopener.open(webaddress)
site = response.read()
nexturl = ''
counter = 0
while(nexturl!=webaddress):
counter += 1
start = 0
for i in range(len(site)-35):
if site[i:i+35].decode('utf-8') == u'<img id="imgSized" class="slideImg"':
start = i + 40
break
else:
print "Something's broken, chief. Error = 1"
next = 0
for i in range(start, 8, -1):
if site[i:i+8] == u'<a href=':
next = i
break
else:
print "Something's broken, chief. Error = 2"
nexturl = urlpuller(next, site)
myopener.retrieve(urlpuller(start,site),foldername+'/'+foldername+str(counter)+'.jpg')
print("Retrieval of "+foldername+" completed.")
когда я пытаюсь запустить его с помощью сайта, который я использую, он возвращает ошибку:
Traceback (most recent call last):
File "yada/yadayada/Python/scraper.py", line 37, in <module>
if site[i:i+35].decode('utf-8') == u'<img id="imgSized" class="slideImg"':
File "/usr/lib/python2.7/encodings/utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xc3 in position 34: unexpected end of data
когда указал на http://google.com, он работал как раз штраф.
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
но когда я пытаюсь декодировать с помощью utf-8, как вы можете видеть, это не работает.
какие предложения?
2 ответов
site[i:i+35].decode('utf-8')
вы не можете случайным образом разделить полученные байты, а затем попросить UTF-8 декодировать их. UTF-8-это многобайтовая кодировка, то есть вы можете иметь от 1 до 6 байт для представления одного символа. Если вы разрубите это пополам и попросите Python расшифровать его, он бросит вам unexpected end of data
ошибка.
посмотрите в инструмент, который имеет это построено для вас. BeautifulSoup или библиотека lxml две альтернативы.
вместо вашего for-loop сделайте что-то вроде:
start = site.decode('utf-8').find('<img id="imgSized" class="slideImg"') + 40