tweepy.Cursor 将不相关的搜索结果返回到我选择的查询

Posted

技术标签:

【中文标题】tweepy.Cursor 将不相关的搜索结果返回到我选择的查询【英文标题】:tweepy.Cursor returns unrelated search results to the query I selected 【发布时间】:2021-01-19 09:22:37 【问题描述】:

作为我硕士学位的一部分,我需要从 Twitter 收集数据以用于未来的机器学习模型。

有什么问题?

我正在尝试获取带有给定主题标签 (#) 的推文,例如 #climatechange 之类的非常简单的东西,因此我从堆栈溢出时的其他问题中了解到,我需要添加 q 参数并在那里传递“#climatechange”字符串。

代码如下:

# Loads JSON Credentials.
twitter_credentials_json = load_twitter_credentials('TwitterCredentials.json')

# Creates tweepy.API object.
auth = tweepy.OAuthHandler(twitter_credentials_json['consumer_key'], twitter_credentials_json['consumer_secret'])
auth.set_access_token(twitter_credentials_json['access_token'], twitter_credentials_json['access_token_secret'])
api = tweepy.API(auth, wait_on_rate_limit=True)

data_list = []

# Iterates through the required tweets and adds them to the list.
for tweet in tweepy.Cursor(api.search, q="#climatechange", since="2020-01-01", until="2020-10-01").items(100):
  data_list.append(tweet._json)
# Drops everything to the file system.
with open(f"Tweets get_datetime_as_string().json", 'w', encoding='utf8') as outfile:
  outfile.write(json.dumps(data_list))
  outfile.close()

如您所见,我在 Twitter 上搜索,我需要包含字符串“#climatechange”的每个文本,从 2020 年 1 月 1 日到 2020 年 10 月 1 日,我需要 100 项。 现在我打开 JSON 文件,在 JSON 文件中看到一些不相关的推文,不包含“#climatechange”文本。我决定检查我从 tweepy 收到的整个对象,并且在任何地方也没有提到“#climatechange”字符串。

例如:

"text": "RT @BetteMidler:#GOP 无法执政。记住他们 主持了 #9-11、#IraqWar、2008 #GreatRecession 和 当他们返回 t\u2026"

"text": "RT @DeWayne_Fulton:#Texas 可以引领能源之路 创新——安全、清洁、高效、可再生 能量。\n\n@Lizzie4Congress 知道 th\u2026",

总结到现在:

    我会根据特定条件从 twitter 获得推文。 我将它们保存到文件系统中。 我打开 JSON 文件,大约 10% 的推文其中没有“#climatechange”字符串

我试图解决这个问题的方法是什么?

    当然,我尝试做的第一件事是查看 Cursor 对象的官方文档,但我没有找到任何有用的东西,我什至没有找到 q 参数或其他任何东西,尽管许多堆栈溢出解决方案使用这些参数。 http://docs.tweepy.org/en/v3.9.0/cursor_tutorial.html 文档似乎没有完整编写或缺少很多东西,我的文档哪里出错了?

    如果有人也遇到此问题,我在 Stack Overflow 和其他一些网站上进行了搜索,但没有找到任何相关内容。

    我在 *** 上搜索了 tweepy.Cursor 解决方案来调整我的参数,我尝试添加某人参数,删除了一些但仍然没有。

    我尝试去 tweepy.Cursor GitHub 代码了解它是如何工作的,但我并不完全了解它是如何工作的,所以在那里没有成功。


据我了解,一旦我用一些字符串指定“q”参数,它将搜索包含此查询参数的字符串并仅返回有效的推文,但正如我所见,存在一些问题,它返回不相关的推文。

我很乐意得到一些帮助,或者如果你能告诉我我错过了什么,我确信这是我错过的一些小事,这就是我没有得到正确数据的原因。

谢谢。

【问题讨论】:

【参考方案1】:

很可能看起来不相关的推文被截断为 140 个字符,而您搜索的文本位于“扩展”推文部分。如果您将 tweet_mode=extended 添加到 api.search 调用,那么它应该在扩展推文的 full_text 字段中检索完整的推文文本。

您还应该注意,旧的标准 Twitter 搜索 API(这是 api.search 所调用的)仅支持在过去 7 天内的推文搜索。在较长一段时间内,您将需要使用 Twitter 高级 30 天或完整存档搜索 API。

【讨论】:

Andy Piper 非常感谢,添加 tweet_mode='extended' 解决了问题并返回全文。所以你是说使用 Twitter API 或使用访问 Twitter API 的 tweepy 库只会从当前数据返回 7 天的推文?我必须购买 Twitter 的高级套餐才能获得超过 7 天的推文?是否有一个 API 可以接收超过 7 天的推文?谢谢! 是的,旧标准搜索最多返回 7 天的数据。有一个免费层(称为“沙盒”)可用于 30 天和完整存档搜索 API,但可用请求的数量有限。但是,它可能会帮助您实现更接近您想要的目标。另请注意,高级 API 以及新的 v2 API 没有“扩展”推文的概念,因为默认情况下所有推文都包含全文。

以上是关于tweepy.Cursor 将不相关的搜索结果返回到我选择的查询的主要内容,如果未能解决你的问题,请参考以下文章

如何避免使用 tweepy Twitter API 的速率限制?

解析:如果我将它与指针类型一起使用,“containedIn”将不返回任何内容

将不相关子查询重写为相关子查询

如何将不相关的历史记录作为一系列新提交推送?

为啥在我将不相关的 div 添加到 DOM 后,JQuery UI Datepicker 停止工作?

Git 因致命错误而失败。拒绝将不相关的历史与 git push 合并?