- 本书赞誉
- 前言
- 目标读者
- 不适合阅读本书的读者
- 本书结构
- 什么是数据处理
- 遇到困难怎么办
- 排版约定
- 使用代码示例
- 致谢
- 第 1 章 Python 简介
- 第 2 章 Python 基础
- 第 3 章 供机器读取的数据
- 第 4 章 处理 Excel 文件
- 第 5 章 处理 PDF 文件 以及用 Python 解决问题
- 第 6 章 数据获取与存储
- 第 7 章 数据清洗:研究、匹配与格式化
- 第 8 章 数据清洗:标准化和脚本化
- 第 9 章 数据探索和分析
- 第 10 章 展示数据
- 第 11 章 网页抓取:获取并存储网络数据
- 第 12 章 高级网页抓取:屏幕抓取器与爬虫
- 第 13 章 应用编程接口
- 第 14 章 自动化和规模化
- 第 15 章 结论
- 附录 A 编程语言对比
- 附录 B 初学者的 Python 学习资源
- 附录 C 学习命令行
- 附录 D 高级 Python 设置
- 附录 E Python 陷阱
- 附录 F IPython 指南
- 附录 G 使用亚马逊网络服务
- 关于作者
- 关于封面
13.4 使用 Twitter 流式 API 进行高级数据收集
本章前文中提到过,有两种类型的 Twitter API 可以使用:REST API 和流式 API。
流式 API 同 REST API 相比有什么差别呢?下面进行了简单的概括。
· 数据是实时的,而 REST API 只返回已经发布一段时间的推文。
· 流式 API 缺乏普遍性,但是在未来,随着更多实时数据的生成和曝光,其可用性会变得越来越高。
· 因为最新的数据很有趣,所以很多人对这部分数据很感兴趣,这意味着你可以在网络上找到很多资源和帮助。
让我们创建一个脚本来收集来自流式 API 的数据。这个脚本会使用在这一章覆盖到的所有知识。首先编写最基础的部分——输入值和 key 值。
from tweepy.streaming import StreamListener ➊ from tweepy import OAuthHandler, Stream ➋ API_KEY = '5Hqg6JTZ0cC89hUThySd5yZcL' API_SECRET = 'Ncp1oi5tUPbZF19Vdp8Jp8pNHBBfPdXGFtXqoKd6Cqn87xRj0c' TOKEN_KEY = '3272304896-ZTGUZZ6QsYKtZqXAVMLaJzR8qjrPW22iiu9ko4w' TOKEN_SECRET = 'nsNY13aPGWdm2QcgOl0qwqs5bwLBZ1iUVS2OE34QsuR4C'
❶ 导入 StreamListener,这会创建一个流式会话,并且监听信息。
❷ 导入之前使用过的 OAuthHandler,以及 Stream,后者是真正处理 Twitter 的流信息的类。
这个脚本中的 import 语句和上一个脚本中的有少许不同。这两种方式都是合法的,只是个人偏好问题。下面是这两种方式的一个快速比较。
方式 1
import tweepy ... auth = tweepy.OAuthHandler(API_KEY, API_SECRET)
方式 2
from tweepy import OAuthHandler ... auth = OAuthHandler(API_KEY, API_SECRET)
通常情况下,脚本中没有频繁使用库时使用第一种方式。在你有一长串代码,想要更清晰一些的时候,也适合使用第一种方式。然而,当库使用得非常多时,要将其都打印出来会变得令人厌烦;同样,如果这个库是脚本的基础,从这个库导入的模块或类对人们来说应该很明显。
现在,要创建导入的 StreamListener 类的子类(在第 12 章学习的概念),以覆写其中的 on_data 方法。为此,在新的类 Listener 中重新定义了这个函数。当有数据时,我们想要在终端中看到它们,所以添加 print 语句到函数中。
class Listener(StreamListener): ➊ def on_data(self, data): ➋ print data ➌ return True ➍
❶ 创建 StreamListener 的子类。
❷ 定义 on_data 方法。
❸ 输出推文。
❹ 返回 True。StreamListener 有 on_data 方法,同样返回 True。因为我们创建了子类并重新定义了这个函数,所以必须在子类方法中重复返回这个值。
接下来,添加你的认证处理逻辑:
auth = OAuthHandler(API_KEY, API_SECRET) auth.set_access_token(TOKEN_KEY, TOKEN_SECRET)
最后,将 Listener 和 auth 传入到 Stream 中,开始使用搜索词过滤。在这个案例中,我们查看 child labor(童工),因为它相对于 #childlabor 更加普遍。
stream = Stream(auth, Listener()) ➊ stream.filter(track=['child labor']) ➋
❶ 将 auth 和 Listener 作为参数传递,创建一个流。
❷ 过滤流,只返回有 child 和 labor 存在的条目。
最后的脚本如下:
from tweepy.streaming import StreamListener from tweepy import OAuthHandler, Stream API_KEY = '5Hqg6JTZ0cC89hUThySd5yZcL' API_SECRET = 'Ncp1oi5tUPbZF19Vdp8Jp8pNHBBfPdXGFtXqoKd6Cqn87xRj0c' TOKEN_KEY = '3272304896-ZTGUZZ6QsYKtZqXAVMLaJzR8qjrPW22iiu9ko4w' TOKEN_SECRET = 'nsNY13aPGWdm2QcgOl0qwqs5bwLBZ1iUVS2OE34QsuR4C' class Listener(StreamListener): def on_data(self, data): print data return True auth = OAuthHandler(API_KEY, API_SECRET) auth.set_access_token(TOKEN_KEY, TOKEN_SECRET) stream = Stream(auth, Listener()) stream.filter(track=['child labor'])
下面,你需要添加代码,通过 on_data 方法,像本章之前那样将推文保存到数据库、文件或其他的存储工具。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论