python - 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",
总结到现在:
- 我通过特定条件从 twitter 获得推文。
- 我将它们保存到文件系统中。
- 我打开 JSON 文件,大约 10% 的推文中没有“#climatechange”字符串。
我试图解决这个问题是什么?
当然,我尝试做的第一件事是查看 Cursor 对象的官方文档,但我没有找到任何有用的东西,我什至没有找到 q 参数或其他任何东西,尽管许多堆栈溢出解决方案都使用这些参数。 http://docs.tweepy.org/en/v3.9.0/cursor_tutorial.html 似乎文档没有完全编写或缺少很多东西,我的文档哪里出错了?
如果有人也遇到此问题,我在 Stack Overflow 和其他一些网站上进行了搜索,但没有找到任何相关内容。
我在 StackOverflow 上搜索了 tweepy.Cursor 解决方案来调整我的参数,我尝试添加一些参数,删除一些但仍然没有。
我试着去 tweepy.Cursor GitHub 代码来了解它是如何工作的,但我没有完全理解它是如何工作的,所以在那里没有成功。
据我了解,一旦我用一些字符串指定“q”参数,它将搜索包含此查询参数的字符串并仅返回有效的推文,但正如我所见,存在一些问题,它返回不相关的推文。
我很乐意得到一些帮助,或者如果你能告诉我我想念什么,我相信这是我想念的小东西,这就是我没有得到正确数据的原因。
谢谢。
解决方案
看起来不相关的推文很可能被截断为 140 个字符,并且您搜索的文本位于“扩展”推文部分。如果您添加tweet_mode=extended
到调用中,那么它应该在扩展推文api.search
的字段中检索完整的推文文本。full_text
您还应该知道,旧的标准 Twitter 搜索 API(这api.search
是调用的)仅支持在过去 7 天内的推文搜索。在较长一段时间内,您将需要使用 Twitter 高级 30 天或完整存档搜索 API。
推荐阅读
- django - 初始化存储失败:执行迁移失败:创建迁移表:无法打开数据库文件
- python - 尝试用覆盆子读取 i2c 中的多个地址
- python - 网页检测 Selenium ChromeDriver
- mongodb - Kafka Mongo Sink 连接器,如何将 SMT 时间戳转换器用于 JSON 数组中归档的日期
- rsync - 如何使用 rsync 过滤特定的隐藏“点”文件?
- javascript - 我需要返回 null 作为名为 null 的键的值,但它一直返回未定义
- c++ - C ++:具有初始化列表的默认构造函数
- java - java - 如何在没有扫描仪的Java命令提示符中请求的输入中输入字符串作为值
- c - 在链表程序c中查找重复的数据条目
- html - 在 React.js 中将图像设置为完整背景