我现在遇到一个关于中国人的问题。 我使用beautifulsoup来提取数据,并希望创建一个文件夹使用提取数据的名称。 数据喜欢:
<A href="love">星座(1824)</A>
我想提取'星座(1824)',所以我喜欢
soup.find('a',href='love')
但在控制台中,它出来了:
ÐÇ×ù(1824)
我在我的源头使用'# - - 编码:utf-8 - - '。 它必须是一些编码问题,任何人都可以提供一些关于非英语python工作的好材料吗?
我想创建一个名为'星座(1824)'的文件夹 我这样做:
if not os.path.exists(dir_name):
os.mkdir('./pic/'+dir_name)
当我发现名为“ÐÇ×ù(1824)”的文件夹存在时,为什么它仍然出现:
OSError: [Errno 17] File exists: './vguagua_pic/\xc3\x90\xc3\x87\xc3\x97\xc3\xb9(1824)'
THX
答案 0 :(得分:3)
即使您的.py脚本是用UTF-8编写的,如果网页不是,则解析后的文本也可能不正确。
网页的编码实际上是GB-2312(或GB-18030),但是BeautifulSoup错误地猜测网页的编码为ISO-8859-1,并且使用错误的假设,转换为UTF-8并导致mojibake。我们可以验证:
>>> b'\xc3\x90\xc3\x87\xc3\x97\xc3\xb9'.decode('utf8').encode('latin1').decode('gb2312')
'星座'
您可以将from_encoding="gb2312"
(在bs4中)或fromEncoding="gb2312"
(在3.x中)添加到BeautifulSoup构造函数中以强制进行编码,如Beautiful Soup Documentation (and also in Chinese 中文文档)中所述
答案 1 :(得分:0)
您的问题很可能是您的控制台无法显示中文字符。
我在Win7上尝试了这个,使用以下代码:
# -*- coding: utf-8 -*-
import os
os.mkdir(u'星座(1824)')
dos控制台将中文字符显示为两个框,但是,在这里粘贴它们时它们会正确显示:
2012-06-25 07:59 <DIR> 星座(1824)
它们也会在Windows资源管理器中正确显示。