如何使用 tweepy 或其他 Python 库获取超过一周的推文?

44

我一直在尝试解决这个问题,但这真的很令人沮丧。我正在尝试使用Tweepy获取带有特定标签的推文(大量推文),但是它只能获取到一周以内的数据。我需要至少回溯两年并获得几个月的数据。如果可能的话,该如何实现?

以下是我的代码,仅供参考。

import tweepy
import csv

consumer_key = '####'
consumer_secret = '####'
access_token = '####'
access_token_secret = '####'

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)

# Open/Create a file to append data
csvFile = open('tweets.csv', 'a')
#Use csv Writer
csvWriter = csv.writer(csvFile)


for tweet in tweepy.Cursor(api.search,q="#ps4",count=100,\
                           lang="en",\
                           since_id=2014-06-12).items():
    print tweet.created_at, tweet.text
    csvWriter.writerow([tweet.created_at, tweet.text.encode('utf-8')])

7
请注意,since_id=2014-06-12since_id=1996 是等价的,因为 2014 减去 6 再减去 12 等于 1996。 - Robᵩ
您可以使用Rest API获取一周前的推文。 更多详细信息请访问Twitter API参考 https://dev.twitter.com/rest/reference/get/statuses/user_timeline - Mohammad Sadiq
可能是获取Twitter的历史数据的重复问题。 - Nemo
8个回答

22

这还能用吗?当我尝试使用“--since”和“--until”选项时,它会给我返回0条推文? - Luke Barker
2
在纯净的Ubuntu 12.04上对我无效,因此我必须首先安装pyquery和lxml。如果有人遇到同样的问题,请执行apt-get install python-pip; pip install pyquery; apt-get install python-lxml; 然后脚本将正常工作。;) - Rehmat
对于仍在苦苦挣扎的人,你还需要安装这两个库:sudo apt-get install libxslt-dev libxml2-dev - Pinkesh Badjatiya
我注意到它没有检索转推。 - Daniel Zhang

22

根据文档,您不能使用Twitter搜索API收集两年前的推文。

请注意,twitter.com上的搜索结果可能会返回历史结果,而Search API通常只提供过去一周的推文。- Twitter文档.

如果您需要获取旧推文,您可以从个人用户那里获取它们,因为从他们那里收集推文是受数量限制而不是时间限制的(因此在许多情况下,您可以回溯数月或数年)。像Topsy这样收集推文的第三方服务也可能对您有用(截至2016年7月已关闭,但存在其他服务)。


1
Twitter在2014年11月开放了所有旧推文的搜索功能:http://www.theverge.com/2014/11/18/7242477/twitter-search-now-lets-you-find-any-tweet-ever-sent - Vic Nicethemer
1
这是他们的搜索引擎,他们的API也是这样吗? - Luigi
7
目前还没有,我今天刚测试过 :( - rahulserver

8

找到了一段能够帮助检索旧推文的代码。https://github.com/Jefferson-Henrique/GetOldTweets-python

为获取旧的推文,在代码存储库提取后的目录中运行以下命令。

python Exporter.py --querysearch 'keyword' --since 2016-01-10 --until 2016-01-15 --maxtweets 1000

它返回了一个名为 'output_got.csv' 的文件,其中包含在上述日期中带有您的关键字的1000条推文。

您需要安装一个名为“pyquery”的模块才能使此工作正常运行。

附注:您可以修改“Exporter.py”Python代码文件以根据您的要求获取更多推文属性。


我尝试使用maxtweets 10000在2015年搜索一个月的推文。但是只能获取大约200条。看起来,日期越早,获取的数据就越少。 - Shaohua Huang

5

2

虽然这是一个很老的问题,但仍有一些人可能会面临同样的问题。经过一番挖掘,我发现Tweepy的搜索只返回过去7天的数据,有时需要购买第三方服务。我使用了Python库GetOldTweets3,它对我来说运作良好。这个库的实用性非常简单。唯一的限制是我们不能在一个执行中搜索超过一个标签,但它可以同时搜索多个账户。


1
对我来说没有起作用。在运行您提供的网站示例时发生了HTTP请求错误:HTTP错误404:未找到。Python 3.7,Ubuntu 20.04。 - Katu

1
使用参数 "since" 和 "until" 来调整你的时间范围。你目前正在使用 since_id,它是对应 Twitter ID 值(而不是日期)的。
for tweet in tweepy.Cursor(api.search,
                           q="test",
                           since="2014-01-01",
                           until="2014-02-01",
                           lang="en").items():

3
是的,我尝试过那个方法,但不可能。如果日期超过一周,输出就是空的。所以我必须使用其他方法,但我找不到其他有效的方法。 - MustiHakan

1
正如其他人所指出的,Twitter API有日期限制,但实际上在twitter.com上实现的高级搜索没有此限制。因此,解决方案是使用Python的Selenium或PhantomJS包装器来迭代twitter.com端点。这里有一个使用Selenium实现的示例,有人已经发布在Github上:https://github.com/bpb27/twitter_scraping/

1

1
请在您的回答中添加链接的必要部分。 - Dmitrii Sidenko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接