【发布时间】:2014-08-12 22:13:00
【问题描述】:
我正在尝试使用 tweepy 来构建推文数据集。现在,我正在为单个搜索词运行流,但我想使用该库同时搜索不同的查询。我知道我能够为twitterStream.filter 函数提供一个列表,而不仅仅是“迪士尼”术语,但是我不确定在这种情况下如何查看哪个推文是哪个术语返回的结果。
以下代码的一个很好的扩展是搜索["Disney", "Pandabears", "Polarbears"] 而不仅仅是"Disney" 并知道哪个查询返回了命中?
原则上我可以想到两种方法:
1:在结果推文中搜索搜索词并相应地标记它们。但是,这并不能真正解决问题,因为推文可能包含两个搜索词。 Described here
2:运行与搜索词一样多的流。但是,我不确定 API 是否允许同一个应用同时拥有多个活动流?
from tweepy import Stream
from tweepy import OAuthHandler
from tweepy.streaming import StreamListener
import time
ckey = "secret"
csecret="secret"
atoken="secret"
asecret="secret"
searchterm = "Disney"
class listener(StreamListener):
def on_data(self, data):
try:
tweet = data.split(',"text":"')[1].split('","source')[0]
saveThis = str(time.time())+"::%::"+tweet
saveFile = open("tweets.csv", "a")
saveFile.write(saveThis)
saveFile.write("\n")
saveFile.close()
return True
except BaseException, e:
print "Failed on data", str(e)
time.sleep(10)
return True # Don't kill the stream
def on_error(self, status):
print status
time.sleep(5)
return True # Don't kill the stream
try:
auth = OAuthHandler(ckey, csecret)
auth.set_access_token(atoken, asecret)
twitterStream = Stream(auth, listener())
twitterStream.filter(track=[searchterm])
except Exception:
print "Failed in auth or streaming"
有解决这个问题的“好”方法吗?
【问题讨论】:
-
由于 API 限制,您不能在同一应用程序中运行与术语一样多的流,您需要在具有不同密钥的不同机器上执行此操作。但是如果你这样做了,如果一条推文包含多个搜索词,你仍然会在多个流上获得相同的推文。您需要决定如何处理这种情况,然后使用术语列表编写相应的逻辑。如果它们包含多个术语,您可以丢弃它们,多次标记它们或设置标记优先级并且只使用一个标记。