使用 Twitter API 获取有关稀有主题的大型推文数据集



我正在尝试获取一个大型推文数据集,其中包含关键字"IAmsterdam"(阿姆斯特丹的城市营销活动)。我尝试同时使用Twitter的流式处理API和REST API,但我无法获得可以分析的大型数据集(情绪分类)

你们中有谁知道我怎样才能获得更多关于 IAmsterdam 的推文?

代码 REST API:

from TwitterSearch import *
import time
import sys
import codecs
#change to more convenient output type (utf-8)
sys.stdout = codecs.getwriter('utf8')(sys.stdout)
try:
    tso = TwitterSearchOrder()
    tso.set_keywords(['IAmsterdam'])
    tso.set_language('en')

    ts = TwitterSearch(
        consumer_key = '6ZnWpt6HZ1kOVSEjfFwUnLia6',
        consumer_secret = .... ,
         access_token = '2815625730-qSoq6TWyfzqpPJvY71DNAQwGUAfoQu23KgLcPg1',
         access_token_secret = ...
)
    sleep_for = 60 # sleep for 60 seconds
    last_amount_of_queries = 0 # used to detect when new queries are done

    for tweet in ts.search_tweets_iterable(tso):
        print( '@%s tweeted: %s' % ( tweet['user']['screen_name'], tweet['text'] ) )
        current_amount_of_queries = ts.get_statistics()[0]
        if not last_amount_of_queries == current_amount_of_queries:
            last_amount_of_queries = current_amount_of_queries
            time.sleep(sleep_for)
except TwitterSearchException as e:
    print(e)

代码流式处理接口

import time, sys, codecs
#Import the necessary methods from tweepy library
from tweepy.streaming import StreamListener
from tweepy import OAuthHandler
from tweepy import Stream
sys.stdout = codecs.getwriter('utf8')(sys.stdout)
#Variables that contains the user credentials to access Twitter API
access_token = "2815625730-qSoq6TWyfzqpPJvY71DNAQwGUAfoQu23KgLcPg1"
access_token_secret = ....
consumer_key = "6ZnWpt6HZ1kOVSEjfFwUnLia6"
consumer_secret = ....

#This is a basic listener that just prints received tweets to stdout.
class StdOutListener(StreamListener):
    def on_data(self, data):
        try:
            #print data
            tweet = data.split(',"text":"')[1].split('","source')[0]
            print tweet
            saveThis = str('')+ tweet #saves time+actual tweet
            saveFile = open('amsiams6415.txt','a')
            saveFile.write(saveThis)
            saveFile.write('n')
            saveFile.close()
            return True
        except BaseException, e:
            print 'failed ondata,',str(e)
            time.sleep(5)
    def on_error(self, status):
        print status

if __name__ == '__main__':
    #This handles Twitter authetification and the connection to Twitter Streaming API
    l = StdOutListener()
    auth = OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_token, access_token_secret)
    stream = Stream(auth, l)
    #This line filter Twitter Streams to capture data by the keywords: 'Amsterdam'
    stream.filter(track=['IAmsterdam'], languages=['en'])
这里

不需要代码示例:)。

其余 api 的问题在于它只提供 6-9 天的推文。流式处理 API 只会在推文发生时为您提供推文。因此,在这两种情况下,您都必须在较长时间内收集数据才能获得大型数据集。

或者,您必须减少搜索限制,并搜索其他主题标签/关键字。

如果你想快速建立一个大型数据集和/或获取历史数据,那么你可以使用类似 http://topsy.com/的东西,它给你的推文可以追溯到Twitter时间的开始。这是一项付费服务(还有其他服务)。

从 API 获得的数据与您在使用高级搜索时看到的数据相同正如我所看到的,似乎每小时只有几条使用术语"IAmsterdam"的推文并不多,此外,您可以通过指定 lang=en 使搜索更加严格,因此您可以尝试:

  1. 在搜索中包含更多术语,如Anmol-Uppal建议的那样
  2. 删除 lang=en 规范

此外,我建议您更改授权令牌,因为尽管您删除了这些令牌,但仍然有足够的时间供某人复制或存储在网络搜索缓存中。

最新更新