【问题标题】:Loading `status` objects from File?从文件加载“状态”对象?
【发布时间】:2015-12-14 19:19:34
【问题描述】:

几个月前,我开始从 twitter 抓取推文,用于数据分析项目。我使用 Tweepy 和 python3.3 来获取状态对象并将它们转储到一个文件中,每天一个文件。

我这样做主要是因为我只想快速收集数据,但是我遇到了这个问题:

由于状态对象现在是字符串,因此我无法使用 tweepy 将它们转换回来——据我所知——通过从我的文件中加载它们。

这太糟糕了,因为我现在意识到我真的只需要对象的 status._json 部分。出于某种原因,我在 3 个月前不这么认为。

我的问题是这样的:

有没有一种已知的方法可以将这些 status 对象从字符串转换回来?

我检查了Tweepy 文档并用谷歌搜索,我很确定给定工具不可能做到这一点。

我能看到的唯一选择是手动拆分字符串,这看起来很丑。

示例保存在我的文件中的状态对象:
pastebin

这些是按行存储的,每次从 twitter 抓取一个新文件时,只需将它们附加到文件中即可。

【问题讨论】:

  • 您能举例说明这些文件的外观吗?你是怎么救他们的?
  • 我已将其添加为 pastebin 链接 - 行很长。使用open(file, 'a') 选项,我只需将它们写入文件即可保存它们。
  • 也许你可以尝试在它们上运行eval,在从 Tweepy 导入相关类、模块之后?
  • 我已经导入了我在初始挖矿期间使用的所有模块,调用eval(status)返回一个SyntaxError
  • 是的,我也试过了。文本在某些地方并不是真正连续的。另外,我认为这是不可能的。例如,在某些地方,我看到:tweepy.api.API object at 0x7f6fd798fe10。我很确定现在你不能永远得到_api 对象。

标签: python tweepy


【解决方案1】:

这不是您期望的答案,但可能会提供一个起点。

我提取了您的 Status 记录的一个实例,将其放入 text file 中,然后运行此脚本:

# coding: utf-8

with open('status.txt') as f:
    tco = f.read()

import re
re.compile("(?P<key>\w+)=(?P<value>\w+)")
expre = re.compile("(?P<key>\w+)=(?P<value>\w+)")
pairs = dict(re.findall(expre, tco))

这给了你这样的东西:

{'author': 'User',
 'contributors': 'None',
 'contributors_enabled': 'False',
 'coordinates': 'None',
 'created_at': 'datetime',
 'default_profile': 'True',
 'default_profile_image': 'False',
 'favorite_count': '0',
 'favorited': 'False',
 'favourites_count': '46',
 'follow_request_sent': 'None',
 'followers_count': '204',
 'following': 'False',
 'friends_count': '274',
 'geo': 'None',
 'geo_enabled': 'True',
 'id': '652242063048724480',
 'in_reply_to_screen_name': 'None',
 'in_reply_to_status_id': 'None',
 'in_reply_to_status_id_str': 'None',
 'in_reply_to_user_id': 'None',
 'in_reply_to_user_id_str': 'None',
 'is_quote_status': 'False',
 'is_translator': 'False',
 'listed_count': '91',
 'location': 'None',
 'notifications': 'None',
 'place': 'None',
 'possibly_sensitive': 'False',
 'profile_background_tile': 'False',
 'profile_use_background_image': 'True',
 'protected': 'False',
 'retweet_count': '0',
 'retweeted': 'False',
 'statuses_count': '9724',
 'truncated': 'False',
 'user': 'User',
 'utc_offset': '7200',
 'verified': 'False'}

现在显然,这丢失了很多我的简单正则表达式无法解析的信息。 User 对象属性,例如。也有一些 json dicts。

对于您手头的更复杂的问题,我建议您查看parser 模块。不过,我会看看我能在空闲时间做些什么来解决这个问题。似乎是个好问题。

【讨论】:

  • 事实上,我期待有人会建议使用正则表达式——尽管指向parser 模块的指针会有所帮助。干杯伙伴!
  • 很高兴有帮助。
猜你喜欢
  • 2017-07-30
  • 2020-12-09
  • 1970-01-01
  • 2021-07-24
  • 1970-01-01
  • 2021-07-27
  • 1970-01-01
  • 1970-01-01
  • 2021-02-04
相关资源
最近更新 更多