【问题标题】:Retrieving Twitter data using Tweepy使用 Tweepy 检索 Twitter 数据
【发布时间】:2014-12-29 08:18:14
【问题描述】:

我正在使用 Tweepy 库的 Python 代码来检索特定主题标签的 Twitter 数据,但问题是我需要检索特定时期,例如,从 2013 年 6 月 30 日到 2013 年 12 月 30 日。我该怎么做?

#imports
from tweepy import Stream
from tweepy import OAuthHandler
from tweepy.streaming import StreamListener

#setting up the keys
consumer_key = '……………….'
consumer_secret = '……………..' 
access_token = '……………….'
access_secret = '……………..'

class TweetListener(StreamListener):
# A listener handles tweets are the received from the stream.
#This is a basic listener that just prints received tweets to standard output

  def on_data(self, data):
    print (data)
    return True

  def on_error(self, status):
    print (status)



#printing all the tweets to the standard output
auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_secret)



stream = Stream(auth, TweetListener())

t = u"#سوريا"
stream.filter(track=[t])

【问题讨论】:

  • 您无法获取该数据;参见例如stackoverflow.com/a/1733360/3001761
  • 但我连续两天运行代码,检索数据。所有这些元数据只需三周?
  • @Hana 你能解决这个问题吗?
  • 系统仍在检索数据,我不想中断它。我正在等待系统完成检索数据。但是如果您想自己尝试,有人提交了另一个答案,您可以查看!

标签: python twitter tweepy


【解决方案1】:

我仍在调查为什么我无法使用tweepy.Cursor(api.search, geocode=.., q=query, until=date ) 获得相同的结果,也许是因为这个reason。但是我可以通过这些步骤在两个日期之间使用 Tweepy 检索 Twitter 数据。

首先,我在开始日期和结束日期之间创建了一个日期生成器。

def date_range(start,end):
   current = start
   while (end - current).days >= 0:
      yield current
      current = current + datetime.timedelta(seconds=1)  #Based on your need, but you could do it per day/minute/hour

然后,我创建了一个Listener,这样我就可以通过访问status.created_at 来获取特定日期创建的推文

您的代码应如下所示:

import tweepy 
from tweepy import Stream
from tweepy import OAuthHandler
from tweepy.streaming import StreamListener
import json
import datetime 


#Use your keys
consumer_key = '...'
consumer_secret = '...' 
access_token = '...'
access_secret = '...'


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

def date_range(start,end):
   current = start
   while (end - current).days >= 0:
      yield current
      current = current + datetime.timedelta(seconds=1)  

class TweetListener(StreamListener):
    def on_status(self, status):
        #api = tweepy.API(auth_handler=auth)
        #status.created_at += timedelta(hours=900)

        startDate = datetime.datetime(2013, 06, 30)
        stopDate = datetime.datetime(2013, 10, 30)
        for date in date_range(startDate,stopDate):
            status.created_at = date
            print "tweet " + str(status.created_at) +"\n"
            print status.text + "\n"  
            # You can dump your tweets into Json File, or load it to your database

stream = Stream(auth, TweetListener(), secure=True, )
t = u"#Syria" # You can use different hashtags 
stream.filter(track=[t])

输出:

我刚刚打印了要检查的日期(我不想用政治推文向 StackOverflow 发送垃圾邮件)。

tweet 2013-06-30 00:00:01

-------------------

tweet 2013-06-30 00:00:02

-------------------

tweet 2013-06-30 00:00:03

-------------------

tweet 2013-06-30 00:00:04

-------------------

tweet 2013-06-30 00:00:05

-------------------

tweet 2013-06-30 00:00:06

-------------------

tweet 2013-06-30 00:00:07

-------------------

tweet 2013-06-30 00:00:08

-------------------

tweet 2013-06-30 00:00:09

-------------------

【讨论】:

  • 谢谢 Taha,我会在系统完成检索数据后尝试该代码。
  • 我已经尝试过你的代码,它可以工作,但我只得到了没有用户 ID 的推文和推文时间!
猜你喜欢
  • 2015-04-09
  • 2017-07-03
  • 2019-08-16
  • 2013-01-07
  • 2020-09-22
  • 2016-06-26
  • 1970-01-01
  • 2021-10-18
  • 2012-12-15
相关资源
最近更新 更多