代码之家  ›  专栏  ›  技术社区  ›  chappa

使用twepy时在python中写入文件时出现问题

  •  -1
  • chappa  · 技术社区  · 11 年前

    我正在做一个项目,需要提取推文。我也在python中使用了twepy,使用了各种在线信息源,因为我对python不太熟悉。我遇到了两个问题,我无法通过谷歌解决! 1) 我想要大约1000个存储在文件中。我想我可以使用一个计数变量,但不知道在哪里以及如何使用它。基本上,当我收到1000条推特时,如何终止程序? 2) 当打印到文件时,我收到一个错误,该错误显示为“file”Tweet3.py“,第20行,in on_status 打印“推特文本:%s”%status.Text UnicodeEncodeError:“ascii”编解码器无法对位置65中的字符u'\u2019'进行编码:序号不在范围内(128)“- 如何解决此错误?

    代码如下:

    import sys
    import tweepy
    import webbrowser
    fp=open("Tweets.txt","w")
    
    Q=['Earthquake','Flood']#Filters
    
    c_key = '...'
    c_secret = '...'
    a_token= '...'
    a_token_sec= '...'
    
    auth = tweepy.OAuthHandler(c_key, c_secret)
    auth.set_access_token(a_token, a_token_sec)
    
    class CustomStreamListener(tweepy.StreamListener):
    
         def on_status(self, status):
            print "----------NEW TWEET!-----------"
            print "Tweet Text : %s"%status.text
            fp.write(status.text) 
            print "Author's name : %s"%status.author.screen_name 
            print "Time/Date of creation : %s"%status.created_at
            print "Source of Tweet : %s"%status.source
            print "Coordinates : %s"%status.coordinates
    
    streaming_api = tweepy.streaming.Stream(auth, CustomStreamListener(), timeout=60)
    print "Displaying Tweets for filters :"
    #print Q
    #streaming_api.filter(follow=None, track=Q)
    streaming_api.filter(locations=[-125,25,-65,48], async=False)
    
    1 回复  |  直到 11 年前
        1
  •  1
  •   Rishi    11 年前

    在将文本写入文件之前先对其进行编码:

    status.text.encode('utf8')
    

    编辑:

    请尝试以下操作:

    import codecs
    fp = codecs.open("Tweets.txt", "w", "utf-8")
    fp.write(status.text) 
    

    编辑:

    创建一个计数器,并在每次出现新推特时递增,例如:

    counter = 0
    MAX_TWEETS = 1000
    

    在on_status方法中:

    counter += 1
    if counter >= MAX_TWEETS:
        sys.exit()