我正在尝试删除字符串unicode" u'"我的字符串列表中的标记。该列表是此站点http://www.boxofficemojo.com/yearly/chart/?yr=2013&p=.htm的参与者列表。
我有一个从这个网站获取这些字符串的方法:
def getActors(item_url):
response = requests.get(item_url)
soup = BeautifulSoup(response.content, "lxml") # or BeautifulSoup(response.content, "html5lib")
tempActors = []
try:
tempActors.append(soup.find(text="Actors:").find_parent("tr").find_all(text=True)[1:])
except AttributeError:
tempActors.append("n/a")
return tempActors
此方法将每个电影的演员放入临时列表中。 我稍后在使用
的网络抓取方法中调用此方法listOfActors.append(getActors(href))
将所有这些临时列表附加到所有电影演员的大列表中。
稍后,我将此列表写入带有
的csv文件for item in listOfActors:
wr.writerow((item))
现在输出就像
[u'Jennifer Lawrence', u'Josh Hutcherson', u'Liam Hemsworth', u'Elizabeth Banks', u'Stanley Tucci', u'Woody Harrelson', u'Philip Seymour Hoffman', u'Jeffrey Wright', u'Jena Malone', u'Amanda Plummer', u'Sam Claflin', u'Donald Sutherland', u'Lenny Kravitz']
[u'Robert Downey, Jr.', u'Gwyneth Paltrow', u'Don Cheadle', u'Guy Pearce', u'Rebecca Hall', u'James Badge Dale', u'Jon Favreau', u'Ben Kingsley', u'Paul Bettany*', u' ', u'(Voice)', u'Mark Ruffalo*', u' ', u'(Cameo)']
我尝试使用str()
方法,但我认为它不起作用,要么我没有把它放在正确的位置,要么这不是正确的方法去做吧。
问题在于我没有单独将每个演员都列入名单中,我将每个电影的演员聚集在一起,所以我不知道如何转换整个演员。名单。
答案 0 :(得分:1)
提供一个重现问题的小例子,更容易纠正错误。缺少这个,这是一个例子,直接来自UnicodeWriter
文档的codecs
。只需确保您的数据是Unicode字符串列表的列表:
#!python2
#coding:utf8
import csv
import cStringIO
import codecs
data = [[u'Chinese',u'English'],
[u'马克',u'Mark'],
[u'你好',u'Hello']]
class UnicodeWriter:
"""
A CSV writer which will write rows to CSV file "f",
which is encoded in the given encoding.
"""
def __init__(self, f, dialect=csv.excel, encoding="utf-8-sig", **kwds):
# Redirect output to a queue
self.queue = cStringIO.StringIO()
self.writer = csv.writer(self.queue, dialect=dialect, **kwds)
self.stream = f
self.encoder = codecs.getincrementalencoder(encoding)()
def writerow(self, row):
self.writer.writerow([s.encode("utf-8") for s in row])
# Fetch UTF-8 output from the queue ...
data = self.queue.getvalue()
data = data.decode("utf-8")
# ... and reencode it into the target encoding
data = self.encoder.encode(data)
# write to the target stream
self.stream.write(data)
# empty queue
self.queue.truncate(0)
def writerows(self, rows):
for row in rows:
self.writerow(row)
with open('out.csv','wb') as f:
w = UnicodeWriter(f)
w.writerows(data)