很多网站都有公开的API,通过JSON或者其它格式提供数据服务。我们可以利用Python的requests库来访问这些API。Anaconda环境中默认已经安装好了requests,如果你的环境中,没有安装这个包的话,可以通过pip或者conda进行安装:
pip install requests conda install requests
下面我们以获取Github上最新的30条关于pandas的问题为例,介绍如何与Web API交互。
In [113]: import requests # 导入包 In [114]: url = 'https://api.github.com/repos/pandas-dev/pandas/issues' # 要访问的url In [115]: response = requests.get(url) # 访问页面,需要等待一会 In [116]: response # 成功获取响应的数据 Out[116]: <Response [200]> In [117]: data = response.json() # 解析为json格式 In [118]: data[0]['title'] # 查看第一个问题的标题 Out[118]: 'python-project-packaging-with-pandas'
data中的每个元素都是一个包含Github问题页面上的所有数据的字典(注释除外)。
In [119]: data[0] Out[119]: {'url': 'https://api.github.com/repos/pandas-dev/pandas/issues/24779', 'repository_url': 'https://api.github.com/repos/pandas-dev/pandas', 'labels_url': 'https://api.github.com/repos/pandas-dev/pandas/issues/24779/labels{/name}', 'comments_url': 'https://api.github.com/repos/pandas-dev/pandas/issues/24779/comments', 'events_url': 'https://api.github.com/repos/pandas-dev/pandas/issues/24779/events', 'html_url': 'https://github.com/pandas-dev/pandas/issues/24779', 'id': 399193081, 'node_id': 'MDU6SXNzdWUzOTkxOTMwODE=', 'number': 24779, 'title': 'python-project-packaging-with-pandas', ......后面省略
我们可以将data直接传给DataFrame,并提取感兴趣的字段:
In [120]: issues = pd.DataFrame(data, columns= ['number','title','labels','state']) In [121]: issues Out[121]: number ... state 0 24779 ... open 1 24778 ... open 2 24776 ... open 3 24775 ... open 4 24774 ... open .. ... ... ... 25 24736 ... open 26 24735 ... open 27 24733 ... open 28 24732 ... open 29 24730 ... open
上面我们截取了'number','title','labels','state'四个字段的内容,并构造了DataFrame对象,下面就可以利用pandas对它进行各种操作了!
urllib.request 加 json 模块也可以实现。