我正在尝试使用python newspaper3k包提取文章信息,然后写入CSV文件。正确下载信息时,我遇到输出到CSV的问题。尽管我努力阅读它,但我认为我并不完全理解unicode。
{% load i18n pybb_tags %}
<div class='category'>
{% if category %}
<h3>{{ category }}</h3>
{% include 'pybb/forumindex_list.html' with forum_list=category.forums_accessed category=category parent_forum='' %}
{% else %}
<h3>{{ forum.category }}</h3>
{% include 'pybb/forumindex_list.html' with forum_list= %}{{ forum.category|forumindexlistbycategory }}
{% endif %}
</div>
当我打印collate ['content'],即first_article.text时,控制台输出文章的内容就好了。一切都正确显示,撇号和所有。当我写入CVS时,内容单元格文本中包含奇数字符。例如:
“在一天结束时,欧洲的经济形势并不好,通货膨胀看起来并不令人兴奋,而且还有许多政治风险需要考虑。
到目前为止,我已经尝试过:
from newspaper import Article, Source
import csv
first_article = Article(url="http://www.bloomberg.com/news/articles/2016-09-07/asian-stock-futures-deviate-as-s-p-500-ends-flat-crude-tops-46")
first_article.download()
if first_article.is_downloaded:
first_article.parse()
first_article.nlp
article_array = []
collate = {}
collate['title'] = first_article.title
collate['content'] = first_article.text
collate['keywords'] = first_article.keywords
collate['url'] = first_article.url
collate['summary'] = first_article.summary
print(collate['content'])
article_array.append(collate)
keys = article_array[0].keys()
with open('bloombergtest.csv', 'w') as output_file:
csv_writer = csv.DictWriter(output_file, keys)
csv_writer.writeheader()
csv_writer.writerows(article_array)
output_file.close()
无济于事。我也试过utf-16而不是8,但这只是导致单元格以奇数顺序写入。虽然输出看起来正确,但它没有在CSV中正确创建单元格。我也试过.encode('utf-8')是各种变量,但没有任何效果。
发生了什么事?为什么控制台会正确打印文本,而CSV文件有奇怪的字符?我怎样才能解决这个问题?
答案 0 :(得分:5)
根据Leon和Mark Tolonen的建议,将with open('bloombergtest.csv', 'w', encoding='utf-8') as output_file:
更改为with open('bloombergtest.csv', 'w', encoding='utf-8-sig') as output_file:
。
答案 1 :(得分:4)
这可能是您用来打开或打印CSV文件的软件的一个问题 - 它并没有理解&#34; CSV以UTF-8编码,并采用ASCII,latin-1,ISO-8859-1或类似的编码。
您可以帮助该软件识别文件开头placing a BOM sequence的CSV文件编码(通常不推荐用于UTF-8)。
答案 2 :(得分:4)
使用编码utf-8-sig
。 Excel要求BOM解释UTF8;否则,它采用默认的本地化编码。