【问题标题】:Trying to extract tweets with Tweepy, but emojis make it crash尝试使用 Tweepy 提取推文,但表情符号使其崩溃
【发布时间】:2017-11-26 06:07:08
【问题描述】:

我一直在开发一个从 Twitter 帐户中提取推文的程序。它看起来像这样:

import tweepy
from tweepy import OAuthHandler
import json
import time
import sys
import builtins

consumer_key = ''
consumer_secret = ''
access_token = ''
access_secret = ''

auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_secret)

api = tweepy.API(auth)

user = api.get_user('nytimes')

statuses = api.user_timeline(id = user.id, count = 200)

for status in statuses:
    print("***")
    print("Tweet id: " + status.id_str)
    print(status.text)
    print("Retweet count: " + str(status.retweet_count))
    print("Favorite count: " + str(status.favorite_count))
    print(status.created_at)
    print("Status place: " + str(status.place))
    print("Source: " + status.source)
    print("Coordinates: " + str(status.coordinates))

    time.sleep(1)

它工作正常......直到我收到一条带有表情符号的推文。然后我收到此错误消息:

UnicodeEncodeError:“UCS-2”编解码器无法对位置 19-19 中的字符进行编码:Tk 中不支持非 BMP 字符

做了一些研究,我发现了一些应该解决这个问题的代码:

def print_ucs2(*args, print=builtins.print, **kwds):
    args2 = []
    for a in args:
        a = str(a)
    if max(a) > '\uffff':
        b = a.encode('utf-16le', 'surrogatepass')
        chars = [b[i:i+2].decode('utf-16le', 'surrogatepass')
    for i in range(0, len(b), 2)]
        a = ''.join(chars)
        args2.append(a)
        print(*args2, **kwds) 

builtins._print = builtins.print 
builtins.print = print_ucs2

问题是,一旦我将这段代码添加到我的程序中,它只会打印表情符号。没有其他的。我没有错误消息了……但我也没有推文。

我还读到 .encode('utf-8') 可以做一些事情,但我不知道把它放在哪里,到目前为止我只收到使用它的错误消息。有什么想法吗?

谢谢,

【问题讨论】:

  • 你可以参考这个答案,stackoverflow.com/a/32442684/4662041
  • 嗨,谢谢,我确实看到了这个答案,但我不知道如何将它应用到我的代码中......我尝试了一些事情但没有成功,我得到一个“NameError:name 'x' 未定义”错误。
  • 哦,没关系,我成功了!非常感谢!

标签: python twitter tweepy emoji python-unicode


【解决方案1】:

(代表问题作者发布).

解决了!这是使它起作用的行:

non_bmp_map = dict.fromkeys(range(0x10000, sys.maxunicode + 1), 0xfffd)
...
print(status.text.translate(non_bmp_map))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-29
    • 2019-08-30
    • 2020-09-04
    • 2022-11-19
    • 1970-01-01
    • 2021-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多