2015-08-22 56 views
2

我有擦伤网页与urllib2的一些简单的Python代码:Unicode字符2.7.10

response = urllib2.urlopen(url) 
charset = response.headers.getheader("Content-Type") 
charset = charset[charset.index("charset=") + 8:] 
html = response.read() 
html = " ".join(html.split()) 
html = html.decode(charset) 
html = html.replace("amp;", "").replace("'", "'") 

我的问题是,我刮页面有特雷奥毛利语中的词汇,因此它有许多包含宏的词汇,例如。 “Pūtaiao。”当我打印HTML时,所有宏字母都被替换为问号,并且我没有使用任何替换解码方法。它甚至发生没有任何解码,分裂或加入。

在同一网站上还有另一个页面,其中包含一些相同的单词,macron在python中完全显示。我还注意到,页面的响应标题中的字符集是utf-8,而带有问号的页面位于ISO-8859-1中,因此可能与它有关。

带问号的网站的链接是http://www.nzqa.govt.nz/ncea/assessment/search.do?query=reo+maori&view=all&level=01

其他页面http://www.nzqa.govt.nz/qualifications-standards/qualifications/ncea/subjects/

回答

1

好像服务器错误的内容类型响应当它不承认,请求来自用户代理。当我在我的机器上尝试时,我得到了类似的结果。

在向请求标题添加有效的User-Agent之后,我能够正确获取响应的utf-8编码。我不确定这是否是这种情况下的最佳解决方案,但它应该能让您的代码正常工作。示例 -

req = urllib2.Request(url, headers = {"Connection":"keep-alive", "User-Agent":"Mozilla/5.0"}) 
response = urllib2.urlopen(req) 
#After this rest of your original code. 
+0

谢谢!这解决了这个问题。 – james

0

在您的第一个链接上使用请求和美丽的汤。

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
from bs4 import BeautifulSoup 
import requests 

url = "http://www.nzqa.govt.nz/ncea/assessment/search.do?  query=reo+maori&view=all&level=01" 
headers= {"User-Agent":"Mozilla/5.0"} 
r = requests.get(url, headers=headers) 
# print(r.content) 
print(r.encoding) 
print(r.headers['content-type']) 
data = r.text 
data1 = data.encode('UTF-8') 
soup = BeautifulSoup(data1) 
text = soup.get_text() 
text2 = text.encode('utf-8', 'ignore') 
# text2 = text.encode('ascii', 'ignore') 
print(text2) 

其中text2行取决于您下一步要做的事情。

请注意使用由Anand建议的标题