使用python编写csv时出错,可能是unicode/编码/解码问题

使用python编写csv时出错,可能是unicode/编码/解码问题,python,csv,character-encoding,export-to-csv,python-unicode,Python,Csv,Character Encoding,Export To Csv,Python Unicode,我一直试图在其他地方找到答案,但要么我不理解解释,要么解决方案对我的案例不起作用 所以对于这种情况: 1.输出字符为中文 2.阅读部分工作正常,只是书写故障 3.我正在使用Python 2.7.13 请帮忙 顺便说一句,我对python非常陌生,所以如果您找到了任何可以通过使用更好的实践来改进的地方,请指出它们!我会非常感激的 谢谢大家! 代码如下: # -*- coding: utf-8 -*- import csv import urllib2 from bs4 import Beautif

我一直试图在其他地方找到答案,但要么我不理解解释,要么解决方案对我的案例不起作用

所以对于这种情况:
1.输出字符为中文
2.阅读部分工作正常,只是书写故障
3.我正在使用Python 2.7.13

请帮忙

顺便说一句,我对python非常陌生,所以如果您找到了任何可以通过使用更好的实践来改进的地方,请指出它们!我会非常感激的

谢谢大家!

代码如下:

# -*- coding: utf-8 -*-
import csv
import urllib2
from bs4 import BeautifulSoup
import socket
import httplib
# import sys  <= this did not work
# reload(sys)
# sys.setdefaultencoding('utf-8')

with open('/users/Rachael/Desktop/BDnodes.csv', 'r') as readcsv, 
open("/users/Rachael/Desktop/CheckTitle.csv", 'wb') as writecsv:
    writer = csv.writer(writecsv)
    for row in readcsv.readlines():
        opener = urllib2.build_opener()
        opener.addheaders = [('User-Agent',
                          'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1941.0 Safari/537.36')]
        urllib2.install_opener(opener)
        openpage = urllib2.urlopen(row).read()
        soup = BeautifulSoup(openpage, "lxml")
        # print "page results:"
        for child in soup.findAll("h3", {"class": "t"}):
            try:
                geturls = child.a.get('href')
                # print urllib2.urlopen(geturls).geturl()
                url_result = urllib2.urlopen(geturls).geturl()
                # print url_result
                try:
                    openitem = urllib2.urlopen(url_result).read()
                    gettitle = BeautifulSoup(openitem, 'lxml')
                    url_title = gettitle.title.text
                except urllib2.HTTPError:
                    url_title = 'passed http error'
                    pass
                except urllib2.URLError:
                    url_title = 'passed url error'
                    pass
                except socket.timeout:
                    url_title = 'passed timeout'
                    pass
                except httplib.BadStatusLine:
                   url_title = 'passed badstatus'
                    pass
                except:
                    url_title = 'unknown'
                    pass
            except urllib2.HTTPError as e:
                pass
            except urllib2.URLError:
                pass
            except socket.timeout:
                pass
            except httplib.BadStatusLine:
                pass
            writer.writerow([url_result, url_title])
            # writer.writerow([url_result, url_title.encode('utf-8')]) did not work either, even tried with 'utf-16'
writecsv.close()
#-*-编码:utf-8-*-
导入csv
导入urllib2
从bs4导入BeautifulSoup
导入套接字
导入httplib

#导入sys您可以在open函数中传递编码参数

import codecs
codecs.open("/users/Rachael/Desktop/CheckTitle.csv", 'wb', encoding='utf-8') as writecsv

可能是您原来的解决方案是正确的,但问题出在“result”变量而不是标题中

试试像这样的东西

writer.writerow([url_result.encode('utf-8'), url_title.encode('utf-8')])

这会给我一些不可读的字符,比如:寰愮璁? 涓哄叕鐩婅窇鍙嬫彁渚涚編鍛充韩鍙?鎼滅嫄至少你得到了一些东西:-)你试过其他编码吗?对于我来说,在不知道您要搜索哪些站点的情况下,很难猜测您可以使用什么编码。页面是否包含字符集?例如,
Hi Macro,我没有一次写出全部代码。我所做的是编写单独的函数:从搜索结果页面获取目标URL,然后在另一个.py文件中获取标题,然后进行分析。它工作得很好,只是我想将各种函数集成到一个文件中,以获得一个集成的结构化结果集。是的,我之前没有遇到这个问题,维德。谢谢拉维,但这会给我:UnicodeEncodeError:“ascii”编解码器无法对位置0-2的字符进行编码:序号不在范围内(128)。我想你的
url\u title
str
对象。因此,在写入文件之前,您实际上需要
url\u title.decode('utf-8')
将其转换为
unicode
对象。我可以知道
type(url\u result)
type(url\u title)
的输出吗?
writer.writerow([url\u result.decode('utf-8'),url\u title])
应该可以工作。
writer.writerow([url_result.encode('utf-8'), url_title.encode('utf-8')])