Tôi đang sử dụng HTMLParser để phân tích các trang tôi kéo xuống bằng urllib và đang đến trên UnicodeDecodeError
ngoại lệ khi chuyển một số đến HTMLParser
.Python HTMLParser: UnicodeDecodeError
Tôi đã thử sử dụng chardet
để phát hiện mã hóa và chuyển đổi thành ascii
hoặc utf-8
(số docs dường như không cho biết nó nên là gì). lossiness là chấp nhận được, nhưng trong khi các giải mã/mã hóa dòng làm việc tốt, tôi luôn luôn nhận được lỗi sau khi self.feed().
Thông tin ở đó nếu tôi chỉ print
.
from HTMLParser import HTMLParser
import urllib
import chardet
class search_youtube(HTMLParser):
def __init__(self, search_terms):
HTMLParser.__init__(self)
self.track_ids = []
for search in search_terms:
self.__in_result = False
search = urllib.quote_plus(search)
query = 'http://youtube.com/results?search_query='
page = urllib.urlopen(query + search).read()
try:
self.feed(page)
except UnicodeDecodeError:
encoding = chardet.detect(page)['encoding']
if encoding != 'unicode':
page = page.decode(encoding)
page = page.encode('ascii', 'ignore')
self.feed(page)
print 'success'
searches = ['telepopmusik breathe']
results = search_youtube(searches)
print results.track_ids
đây là kết quả:
Traceback (most recent call last):
File "test.py", line 27, in <module>
results = search_youtube(searches)
File "test.py", line 23, in __init__
self.feed(page)
File "/usr/lib/python2.6/HTMLParser.py", line 108, in feed
self.goahead(0)
File "/usr/lib/python2.6/HTMLParser.py", line 148, in goahead
k = self.parse_starttag(i)
File "/usr/lib/python2.6/HTMLParser.py", line 252, in parse_starttag
attrvalue = self.unescape(attrvalue)
File "/usr/lib/python2.6/HTMLParser.py", line 390, in unescape
return re.sub(r"&(#?[xX]?(?:[0-9a-fA-F]+|\w{1,8}));", replaceEntities, s)
File "/usr/lib/python2.6/re.py", line 151, in sub
return _compile(pattern, 0).sub(repl, string, count)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 1: ordinal not in range(128)
mã tôi đã đăng bao gồm url mẫu. chardet nói url mẫu là utf-8, nhưng khi sử dụng chương trình, các mã hóa khác sẽ gặp phải (tất cả chúng đều cho cùng một lỗi unicode). Tôi có thể đọc nó và nó có ý nghĩa khi nó in ra bàn điều khiển của tôi. Ubuntu 10.10 là hệ điều hành của tôi. Tôi không có lý do giải mã/mã hóa. Tôi đang đấu tranh để hiểu điều này, và đã tìm thấy rất nhiều đề xuất xung đột thông qua google, đó là một trong số họ nguyên văn (tôi không nhớ từ đâu). cảm ơn sự giúp đỡ của bạn. P.S. 'page.decode ('utf-8'); self.feed (trang) 'cho cùng một lỗi. –
Chỉ cần làm rõ, bạn đã thử 'page = page.decode ('utf-8'); self.feed (trang) '? – William
có tôi có, nó đã cho tôi cùng một lỗi: 'UnicodeDecodeError: 'ascii' codec không thể giải mã byte 0xc3 ở vị trí 16688: thứ tự không nằm trong phạm vi (128)' –