tweepy.Cursor returns 与我选择的查询不相关的搜索结果

tweepy.Cursor returns unrelated search results to the query I selected

作为我硕士学位的一部分,我需要从 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 上进行搜索,我要求从 2020 年 1 月 1 日到 2020 年 10 月 1 日,每条包含字符串“#climatechange”的文本,我取了 100 条。 现在我打开 JSON 文件,我在 JSON 文件中看到一些不相关的推文, 不包含“#climatechange”文本。我决定检查我从 tweepy 收到的整个对象,也没有提到任何地方的“#climatechange”字符串。

例如:

"text": "RT @BetteMidler: The #GOP cannot govern. Remember they presided over #9-11, the #IraqWar, the 2008 #GreatRecession, & when they returned t\u2026"

"text": "RT @DeWayne_Fulton: #Texas can lead the way in energy innovation--safe, clean, efficient, renewable energy.\n\n@Lizzie4Congress knows that th\u2026",

总结到现在:

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

我尝试过什么来解决这个问题?

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

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

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

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


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

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

谢谢。

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

您还应注意,旧版标准 Twitter 搜索 API(这就是 api.search 所调用的内容)仅支持搜索过去 7 天内的推文。对于更长的时间,您将需要使用 Twitter premium 30 天或 full-archive 搜索 APIs.