3

我现在遇到一个关于中文字符的问题。我使用beautifulsoup 提取数据,并想创建一个文件夹使用提取数据的名称。数据喜欢:

<A href="love">星座(1824)</A>

我想提取“星座(1824)”,所以我喜欢

soup.find('a',href='love')

但在控制台中,它出来了:

ÐÇ×ù(1824)

我在源代码的开头使用了'# - - coding: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)'

谢谢

4

2 回答 2

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 文档 (以及中文文档)中所述。

于 2012-06-25T06:14:22.920 回答
0

你的问题很可能是你的控制台不能显示汉字。

我在Win7上试过这个,代码如下:

# -*- coding: utf-8 -*-
import os
os.mkdir(u'星座(1824)')

dos控制台将中文字符显示为两个框,但是,将它们粘贴到此处时,它们会正确显示:

2012-06-25  07:59    <DIR>          星座(1824)

它们也在 Windows 资源管理器中正确显示。

于 2012-06-25T06:06:27.120 回答