- 本书赞誉
- 前言
- 目标读者
- 不适合阅读本书的读者
- 本书结构
- 什么是数据处理
- 遇到困难怎么办
- 排版约定
- 使用代码示例
- 致谢
- 第 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.2 一次简单的 Twitter REST API 数据拉取
有了一系列的 key 值,现在可以开始访问 Twitter 的 API 数据了。在这一节中,我们会编写一个简单的脚本,使用一个搜索查询,从 API 拉取数据。这一节中的脚本基于一个由 Twitter 提供的、作为示例的 Python 代码片段(https://dev.twitter.com/oauth/overview/single-user#python)。这份代码使用了 Python OAuth2,OAuth2 是在使用 API 时为了安全地识别和连接而使用的协议。
当下最好的认证方式是使用 OAuth2。一些 API 可能仍旧在使用 OAuth1。OAuth1 与 OAuth2 在功能上有所不同,并且是一个已经废弃的协议。如果需要使用 OAuth1,你可以使用 Requests-OAuthlib(https://requests-oauthlib.readthedocs.org/en/latest/),同 requests 一起拉取数据。当通过 API 认证时,确保识别哪一个协议正在被使用。如果使用了错误的协议,在尝试连接时,你会收到错误信息。
首先,需要安装 Python OAuth2:
pip install oauth2
打开一个新文件,导入 oauth2,并且为你的 key 变量赋值:
import oauth2 API_KEY = '5Hqg6JTZ0cC89hUThySd5yZcL' API_SECRET = 'Ncp1oi5tUPbZF19Vdp8Jp8pNHBBfPdXGFtXqoKd6Cqn87xRj0c' TOKEN_KEY = '3272304896-ZTGUZZ6QsYKtZqXAVMLaJzR8qjrPW22iiu9ko4w' TOKEN_SECRET = 'nsNY13aPGWdm2QcgOl0qwqs5bwLBZ1iUVS2OE34QsuR4C'
然后添加函数来创建 OAuth 连接:
def oauth_req(url, key, secret, http_method="GET", post_body="", http_headers=None): consumer = oauth2.Consumer(key=API_KEY, secret=API_SECRET) ➊ token = oauth2.Token(key=key, secret=secret) ➋ client = oauth2.Client(consumer, token) ➌ resp, content = client.request(url, method=http_method, ➍ body=post_body, headers=http_headers) return content ➎
❶ 创建一个 oauth2 对象的消费者。消费者是 key 的所有者。这行代码给消费者提供 key,这样消费者可以顺利地通过 API 识别。
❷ 将 token 赋值给 oauth2 对象。
❸ 创建客户端,包含消费者和 token。
❹ 使用函数参数 url,通过 OAuth2 客户端执行请求。
❺ 返回从连接接收到的内容。
现在有了一个函数,允许我们连接到 Twitter API。然而,我们需要定义 URL,并且调用函数。搜索 API 文档(https://dev.twitter.com/rest/public/search)告诉我们更多有关想要使用的请求的信息。使用 Web 接口,可以看到,如果搜索#childlabor,最终得到的 URL 是:https://twitter.com/search?q=%23childlabor。文档建议重新格式化 URL,所以最终的 URL 如下:https://api.twitter.com/1.1/search/tweets.json?q=%23childlabor。
之后,可以把这个 URL 作为一个变量,并使用之前定义的变量调用函数:
url = 'https://api.twitter.com/1.1/search/tweets.json?q=%23childlabor' data = oauth_req(url, TOKEN_KEY, TOKEN_SECRET) print(data) ➊
❶ 在最后添加打印语句,这样可以看见输出。
运行脚本时,你应该看到数据打印成一个很长的 JSON 对象。你可能记得 JSON 对象看起来和 Python 字典类似,但是如果使用 print(type(data)) 重新运行脚本,你会发现内容是一个字符串。现在我们可以做以下两件事情中的一件:转化数据为一个字典并开始解析它,或者保存字符串到一个文件,之后再解析。为了继续在脚本中解析数据,在脚本顶部添加 import json。之后,在尾部,使用 json 加载字符串,并且输出它。
data = json.loads(data) print(type(data))
变量 data 现在会返回一个 Python 字典。如果你想要将数据写入一个文件并且在之后解析它,替换为下面的代码:
with open('tweet_data.json', 'wb') as data_file: data_file.write(data)
最后的脚本应该看起来像下面这样:
import oauth2 API_KEY = '5Hqg6JTZ0cC89hUThySd5yZcL' API_SECRET = 'Ncp1oi5tUPbZF19Vdp8Jp8pNHBBfPdXGFtXqoKd6Cqn87xRj0c' TOKEN_KEY = '3272304896-ZTGUZZ6QsYKtZqXAVMLaJzR8qjrPW22iiu9ko4w' TOKEN_SECRET = 'nsNY13aPGWdm2QcgOl0qwqs5bwLBZ1iUVS2OE34QsuR4C' def oauth_req(url, key, secret, http_method="GET", post_body="", http_headers=None): consumer = oauth2.Consumer(key=API_KEY, secret=API_SECRET) token = oauth2.Token(key=key, secret=secret) client = oauth2.Client(consumer, token) resp, content = client.request(url, method=http_method, body=post_body, headers=http_headers) return content url = 'https://api.twitter.com/1.1/search/tweets.json?q=%23popeindc' data = oauth_req(url, TOKEN_KEY, TOKEN_SECRET) with open("data/hashchildlabor.json", "w") as data_file: data_file.write(data)
从这里开始,你可以查看 3.2 节,来解析数据。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论