2012-01-09 49 views
2

我想下载page_source到一个文件。然而,每一次我得到一个:没有Python unicode错误下载html

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 (or something else) in 
position 8304: ordinal not in range(128) 

我使用value.encode('utf-8')尝试过,但似乎每次抛出同样的异常时间(除了手动试图取代所有的非ASCII字符)。有没有一种方法可以“预处理”HTML以将其变为“可写”格式?

+0

什么是文件的实际编码? – 2012-01-09 03:11:08

+0

使用UTF8 _而不是_ ASCII。 – SLaks 2012-01-09 03:15:09

回答

3

有第三方库,如BeautifulSouplxml可以自动处理编码问题。但这里是一个使用最原始的例子只是urlllib2

首先下载一些网页包含非ASCII字符:

>>> import urllib2 
>>> response = urllib2.urlopen('http://www.ltg.ed.ac.uk/~richard/unicode-sample.html') 
>>> data = response.read() 

现在看看在“字符集”页面的顶部:

>>> data[:200] 
'<html>\n<head>\n<title>Unicode 2.0 test page</title>\n<meta 
content="text/html; charset=UTF-8" http-equiv="Content-type"/>\n 
</head>\n<body>\n<p>This page contains characters from each of the 
Unicode\ncharact' 

如果没有明显的字符集,无论如何,“UTF-8”通常都是一个很好的猜测。

最后,网页转换为Unicode文本:

>>> text = data.decode('utf-8') 
+0

谢谢,这解决了我的问题。当用一个基本的python脚本下载页面时,我得到了一个带有xce \ xbf \ xb9等的html页面。 – 2016-12-12 21:38:54

1

这个问题可能是你试图去str - >utf-8,当你需要去str - >unicode - >utf-8。换句话说,试试unicode(s, 'utf-8').encode('utf-8')

有关更多信息,请参见http://farmdev.com/talks/unicode/