阅读用python提取的推文

时间:2015-09-04 12:25:46

标签: excel python-3.x twitter utf-8 tweepy

我正在尝试阅读excel中的推文。已使用python(和tweepy)检索推文,然后将其保存在csv文件中:

# -*- coding: utf-8 -*-
writer= csv.writer(open(r"C:\path\twitter_"+date+".csv", "w"), lineterminator='\n', delimiter =';')
writer.writerow(["username", "nb_followers", "tweet_text"])

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token_key, access_token_secret)
api = tweepy.API(auth, wait_on_rate_limit=True, wait_on_rate_limit_notify=True)

for tweet in tweepy.Cursor(api.search, q="dengue+OR+%23dengue", lang="en", since=date, until=end_date).items():
    username=tweet.user.screen_name
    nb_followers=tweet.user.followers_count
    tweet_text=tweet.text.encode('utf-8')  

    writer.writerow([username, nb_followers, tweet_text])

由于utf-8编码,我在文本编辑器或excel中读取它们时遇到问题。 例如这条推文:

enter image description here

在excel中给出了这个:

b"\xe2\x80\x9c@ThislsWow: I want to do this \xf0\x9f\x98\x8d http://t.co/rGfv9e70Tj\xe2\x80\x9d pu\xc3\xb1eta you're going to get bitten by the mosquito and get dengue"

如何获取原始角色?如何在开头删除b,仅在python程序中有用?

编辑:

根据Alastair McCormack的评论: 我删除了我的字段的编码并将其添加到编写器中:

writer= csv.writer(open(r"C:\path\twitter_"+date+".csv", "w", encoding="UTF-8"), lineterminator='\n', delimiter =';')
tweet_text=tweet.text.replace("\n", "").replace("\r", "")

现在我有以下错误:

tweet: Traceback (most recent call last):
  File "twitter_influence.py", line 88, in <module>
    print("tweet:", tweet_text)
  File "C:\Users\rlalande\Envs\tweepy\lib\encodings\cp437.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_map)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u2026' in position 137: character maps to <undefined>

EDIT2:

我现在正在使用以下内容:

import codecs
sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())

(见本文:https://stackoverflow.com/a/4374457/1875861

没有错误但它没有输出正确的字符。

例如这条推文: enter image description here 在excel中提供此输出:

Malay Mail Online  Alarming rise in dengue casesMalay Mail Online“The ministry started a campaign for construction… http://t.co/MuLFlMwkY0

之前,通过直接编码字段,我得到了:

b'Malay Mail Online\n\nAlarming rise in dengue casesMalay Mail Online\xe2\x80\x9cThe ministry started a campaign for construction\xe2\x80\xa6 http://t.co/MuLFlMwkY0'

结果不同但不是真的更好......为什么引号字符输出不正确?在一种情况下,它输出â€|,在另一种情况下输出\ xe2 \ x80 \ xa6。

1 个答案:

答案 0 :(得分:1)

这是因为CSV编写器希望所有输入都是Unicode字符串。你得到一个字节串的__repr __()。

通过将第一行替换为:

来设置输出文件的编码
writer= csv.writer(open(r"C:\path\twitter_"+date+".csv", "w", encoding="UTF-8"), lineterminator='\n', delimiter =';')

这意味着写入文件的任何Unicode字符串都将自动翻译。然后删除明确的encode()

tweet_text=tweet.text

修改

如果不使用导入功能,则需要强制Excel读取UTF-8文件。最简单的方法是将UTF-8 BOM签名添加到文件的开头。

如果您使用utf_8_sig编码,Python会提供快捷方式。 E.g。

writer= csv.writer(open(r"C:\path\twitter_"+date+".csv", "w", encoding="utf_8_sig"), lineterminator='\n', delimiter =';')

您还可以使用Notepad ++或Atom等正确的UTF-8编辑器检查文件。