在Python 2.7.10中爬取网页时,Unicode字符被替换为问号

2024-10-03 00:16:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些简单的python代码,可以用urllib2抓取网页:

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/


Tags: http站点responsehtmlwww页面urllib2解码
2条回答

在第一个链接上使用请求和靓汤。在

#!/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)

哪一行取决于你下一步要做什么。在

注意使用Anand建议的标题

当服务器无法识别请求来自的用户代理时,服务器似乎用错误的内容类型响应。当我在我的机器上尝试时,得到了类似的结果。在

在将有效的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.

相关问题 更多 >