首页 > 解决方案 > tweepy.Cursor 将不相关的搜索结果返回到我选择的查询

问题描述

作为我硕士学位的一部分,我需要从 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",

总结到现在:

  1. 我通过特定条件从 twitter 获得推文。
  2. 我将它们保存到文件系统中。
  3. 我打开 JSON 文件,大约 10% 的推文中没有“#climatechange”字符串

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

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

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

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

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


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

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

谢谢。

标签: pythontwittertweepypython-twitter

解决方案


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

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


推荐阅读