用Python挖掘Twitter数据Part1:数据采集

优采云 发布时间: 2020-08-14 16:43

  这是一系列使用Python专门用于Twitter数据挖掘的文章中的第一篇。在第一部份中,我们将见到通过不同的方法来进行Twitter的数据搜集。一旦我们构建好了一个数据集,在接下来的环节中,我们就将会讨论一些有趣的数据应用。

  

  注册应用

  为了才能访问Twitter数据编程,我们须要创建一个与Twitter的API交互的应用程序。

  第一步是注册一个你的应用程序。值得注意的是,您须要将您的浏览器转入,登录到Twitter(如果您仍未登陆),并注册一个新的应用程序。您如今可以为您的应用程序选择一个名称和说明(例如“挖掘演示”或类似)。您将收到一个消费者秘钥和消费者密码:这些都是应用程序设置,应一直保密。在您的应用程序的配置页面,你也可以要求获取一个访问令牌和访问令牌的密码。类似于消费者秘钥,这些字符串也必须保密:他们提供的应用程序是代表您的账户访问到Twitter。默认权限是只读的,这是我们在案例中须要的,但假如你决定改变您的许可,在应用中提供修改功能,你就必须再获得一个新的访问令牌。

  重要提示:使用Twitter的API时有速度限制,或者你想要提供一个可下载的数据集也会有限制,请参见:

  访问数据

  您可以使用Twitter提供的REST APIs与她们的服务进行交互。那里还有一群基于Python的顾客,我们可以重复循环使用。尤其Tweepy是其中最有趣和最直白的一个,所以我们一起把它安装上去:

  pip install tweepy==3.3.0

  更新:Tweepy发布的3.4.0版本在Python3上出现了一些问题,目前被绑定在GitHub上还不能进行使用,因此在新的版本下来之前,我们仍然使用3.3.0版本。

  更多的更新:Tweepy发布的3.5.0版本早已可以使用,似乎解决了上述提及的在Python3上的问题。

  为了授权我们的应用程序以代表我们访问Twitter,我们须要使用OAuth的界面:

  import tweepyfrom tweepy import OAuthHandler consumer_key = ‘YOUR-CONSUMER-KEY’consumer_secret = ‘YOUR-CONSUMER-SECRET’access_token = ‘YOUR-ACCESS-TOKEN’access_secret = ‘YOUR-ACCESS-SECRET’ auth = OAuthHandler(consumer_key, consumer_secret)auth.set_access_token(access_token, access_secret) api = tweepy.API(auth)

  现在的API变量是我们为可以在Twitter上执行的大多数操作的入口点。

  例如,我们可以看见我们自己的时间表(或者我们的Twitter主页):

  for status in tweepy.Cursor(api.home_timeline).items(10):# Process a single status print(status.text)

  Tweepy提供方便的光标插口,对不同类型的对象进行迭代。在前面的事例中我们用10来限制我们正在阅读的tweets的数目,但是其实也许我们是可以访问更多的。状态变量是Status() class的一个实例,是访问数据时一个漂亮的包装。Twitter API的JSON响应在_json属性(带有前导顿号)上是可用的,它不是纯JSON字符串,而是一个字典。

  所以前面的代码可以被重新写入去处理/存储JSON:

  for status in tweepy.Cursor(api.home_timeline).items(10):# Process a single status process_or_store(status._json)

  如果我们想要一个所有用户的名单?来这里:

  for friend in tweepy.Cursor(api.friends).items(): process_or_store(friend._json)

  那么我们所有的tweets的列表呢? 也很简单:

  for tweet in tweepy.Cursor(api.user_timeline).items(): process_or_store(tweet._json)

  通过这些方法,我们可以很容易地搜集tweets(以及更多),并将它们储存为原创的JSON格式,可以很方便的根据我们的储存格式将其转换为不同的数据模型(很多NoSQL技术提供一些批量导出功能)。

  process_or_store()功能是您的自定义施行占位符。最简单的形式就是你可以只复印出JSON,每行一个tweet:

  def process_or_store(tweet): print(json.dumps(tweet))

  流

  如果我们要“保持联接”,并搜集所有关于特定风波将会出现的tweets,流API就是我们所须要的。我们须要扩充StreamListener()来定义我们处理输入数据的形式。一个用#python hashtag搜集了所有新的tweet的事例:

  from tweepy import Streamfrom tweepy.streaming import StreamListener classMyListener(StreamListener): def on_data(self, data): try: with open(‘python.json’, ‘a’) as f: f.write(data) return True except BaseException as e: print(“Error on_data: %s” % str(e)) return True def on_error(self, status): print(status) return True twitter_stream = Stream(auth, MyListener())twitter_stream.filter(track=[‘#python’])

  根据不同的搜索词,我们可以在几分钟之内搜集到成千上万的tweet。世界性覆盖的现场活动尤其这么(世界杯、超级杯、奥斯卡颁奖典礼等),所以保持关注JSON文件,看看它下降的速率是多么的快,并审视你的测试可能须要多少tweet。以上脚本将把每位tweet保存在新的行中,所以你可以从Unix shell中使用wc-l python.json命令来了解到你搜集了多少tweet。

  你可以在下边的要点中见到Twitter的API流的一个最小工作示例:

  twitter_stream_downloader.py

  总结

  我们早已介绍了tweepy作为通过Python访问Twitter数据的一个相当简单的工具。我们可以按照明晰的“tweet”项目目标搜集一些不同类型的数据。

  一旦我们搜集了一些数据,在剖析应用方面的就可以进行展开了。在接下来的内容中,我们将讨论部份问题。

  简介:Marco Bonzanini是美国纽约的一个数据科学家。活跃于PyData社区的他喜欢从事文本剖析和数据挖掘的应用工作。他是“用Python把握社会化媒体挖掘”( 2016月7月出版)的作者。

  原文链接:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线