我怎样才能获得超过一周的推文(使用 tweepy 或其他 python 库)

Posted

技术标签:

【中文标题】我怎样才能获得超过一周的推文(使用 tweepy 或其他 python 库)【英文标题】:How can I get tweets older than a week (using tweepy or other python libraries) 【发布时间】:2014-08-04 12:52:52 【问题描述】:

我一直在试图解决这个问题,但这真的很令人沮丧。我正在尝试使用 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')])

【问题讨论】:

请注意,since_id=2014-06-12 等价于 since_id=1996,因为 2014 减 6 减 12 等于 1996。 您可以使用 Rest API 来获取超过一周的推文。更多详细信息,请访问 twitter API 参考dev.twitter.com/rest/reference/get/statuses/user_timeline Getting historical data from Twitter的可能重复 【参考方案1】:

您已经注意到 Twitter API 有一些限制,我已经实现了一个代码,它使用与在浏览器上运行的 Twitter 相同的策略来执行此操作。看一看,可以获取最老的推文:https://github.com/Jefferson-Henrique/GetOldTweets-python

【讨论】:

这还能用吗?当我尝试使用 --since 和 until 选项时,它给了我 0 条推文? 在 Vanilla Ubuntu 12.04 上对我不起作用,所以我必须先安装 pyquery & lxml。如果有人遇到同样的问题,请执行 apt-get install python-pip;点安装 pyquery; apt-get 安装 python-lxml;然后脚本将起作用。 ;) 对于仍在苦苦挣扎的人,您还需要安装这两个库:sudo apt-get install libxslt-dev libxml2-dev 我注意到它没有检索转推【参考方案2】:

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

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

如果您需要获取旧推文的方法,您可以从个人用户那里获取它们,因为从他们那里收集推文受到数量而非时间的限制(因此在许多情况下,您可以追溯到数月或数年)。收集 Topsy 之类的推文的第三方服务也可能对您有用(自 2016 年 7 月起关闭,但存在其他服务)。

【讨论】:

Twitter 在 2014 年 11 月打开所有旧推文:theverge.com/2014/11/18/7242477/… 这是他们的搜索引擎,他们的 API 也是如此吗? @Luigi 目前还没有。我今天刚测试过:(【参考方案3】:

找到了一个有助于检索旧推文的代码。 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' 才能工作

PS:您可以根据需要修改“Exporter.py”python 代码文件以获取更多推文属性。

【讨论】:

我尝试在2015年搜索1个月的推文,maxtweets 10000。但它只能得到200左右。似乎日期越早,它可以得到的数据越少。【参考方案4】:

2018 年更新: Twitter 有高级搜索 API,可以从时间开始(2006 年)返回结果:

https://developer.twitter.com/en/docs/tweets/search/overview/premium#ProductPackages

搜索推文:30 天端点 → 提供前 30 条推文 天。

搜索推文:完整存档端点 → 提供完整和即时 访问推文的日期可以追溯到 3 月的第一条推文 2006.

使用示例 Python 客户端: https://github.com/twitterdev/search-tweets-python

【讨论】:

【参考方案5】:

知道这是一个非常古老的问题,但仍有一些人可能面临同样的问题。 经过一番挖掘,我发现 Tweepy 的搜索仅返回过去 7 天的数据,并且有时会导致购买第三方服务。 我使用了 python 库,GetOldTweets3,它对我来说很好用。这个库的实用性非常简单。这个库的唯一限制是我们不能在一次执行中搜索多个主题标签,但它可以很好地同时搜索多个帐户。

【讨论】:

它对我不起作用。 HTTP 请求期间发生错误:HTTP 错误 404:未找到在您链接的网站中运行示例。 Python 3.7、Ubuntu 20.04【参考方案6】:

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

【讨论】:

【参考方案7】:

使用参数“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():

【讨论】:

是的,我试过了,但这也不可能,如果日期超过一周,输出就什么都不是。所以我必须使用与搜索不同的方法,但我没有找到任何其他方法【参考方案8】:

我不敢相信没有人这么说,但这个 git 存储库完全解决了我的问题。我无法使用其他解决方案,例如 GOT 或 Twitter API Premium。

试试这个,绝对有用:

https://betterprogramming.pub/how-to-scrape-tweets-with-snscrape-90124ed006af

https://github.com/MartinBeckUT/TwitterScraper/tree/master/snscrape/cli-with-python

【讨论】:

请将链接的重要部分添加到您的答案中

以上是关于我怎样才能获得超过一周的推文(使用 tweepy 或其他 python 库)的主要内容,如果未能解决你的问题,请参考以下文章

Tweepy Streaming API 为启用地理的推文上的坐标返回“无”

使用 tweepy 返回用户的推文

使用 tweepy 流式传输用户的时间线和过滤的推文

如何使用 tweepy 而不是带有链接的推文的一部分来获取整个推文

使用 tweepy 从“user_timeline”获取完整的推文文本

如何忽略已在 Tweepy 中转发的推文?