30天学习Python👨💻第二十二天——网络请求
网络请求
今天我将继续探索Python脚本更多的可能性。我读了一些有趣的文章,在这篇文章的末尾我会分享出来。
最常见的事情之一是我们经常需要实现和一些API的交互来获取数据并且处理它们。所以我决定找到使用Python可以和API交互并且处理数据的方法。有一些库可以做HTTP请求,比如httplib,httplib2,urllib,但是最常用的库是requestsrequests.readthedocs.io/en/master/。
它能够帮助我们非常容易的发起HTTP请求,并且它还有一个很棒的文档。
它可以使用命令pip install requests下载。
我决定探索如何使用这个请求库尝试做一些有意思的事情。我找到了一个API来跟踪印度的COVID-19统计数据。该API根据ICMR统计数据提供官方数据。我决定使用这个API创建一个脚本可以为我们显示COVID-19每天的数据以及一些其他有用的信息。
- 脚本用来展示每日统计数据
我在已存在的脚本项目中创建了一个脚本文件covid_tracker_india.py。这是GitHub仓库的链接github.com/arindamdawn…
covid_tracker_india.py
import requests
API_URL_ALL_DATA = 'https://api.covid19india.org/data.json'
API_URL_DISTRICT_WISE = 'https://api.covid19india.org/state_district_wise.json'
response = requests.get(API_URL_ALL_DATA)
def get_daily_stats(response):
try:
all_cases_data_list = response.json()['cases_time_series']
latest_cases_data = all_cases_data_list[len(all_cases_data_list) - 1]
formatted_data = f'''
COVID INDIA DAILY STATS:
AS of {latest_cases_data['date']}
******************************
Total Confirmeed Cases : {latest_cases_data['totalconfirmed']}
Total Recovered Cases : {latest_cases_data['totalrecovered']}
Total Deaths Reported: {latest_cases_data['totaldeceased']}
Confirmed Cases Yesterday: {latest_cases_data['dailyconfirmed']}
Confirmed Recovered Cases Yesterday: {latest_cases_data['dailyrecovered']}
Deaths Reported Yesterday: {latest_cases_data['dailydeceased']}
******************************
'''
print(formatted_data)
except:
print('An error occurred while processing data')
if __name__ == '__main__':
get_daily_stats(response)
运行这个脚本,它应该以这种格式打印出这些数据
COVID INDIA DAILY STATS:
AS of 11 July
******************************
Total Confirmeed Cases : 850364
Total Recovered Cases : 536232
Total Deaths Reported: 22689
Confirmed Cases Yesterday: 27755
Confirmed Recovered Cases Yesterday: 19981
Deaths Reported Yesterday: 543
******************************
我进一步实验了这个API的数据,并且创建了另一个函数来展示最活跃的五个州。下面是改进后的代码。
covid_tracker_india.py
import requests
API_URL_ALL_DATA = 'https://api.covid19india.org/data.json'
API_URL_DISTRICT_WISE = 'https://api.covid19india.org/state_district_wise.json'
response = requests.get(API_URL_ALL_DATA)
def get_daily_stats(response):
try:
all_cases_data_list = response.json()['cases_time_series']
latest_cases_data = all_cases_data_list[len(all_cases_data_list) - 1]
formatted_data = f'''
COVID INDIA DAILY STATS:
AS of {latest_cases_data['date']}
******************************
Total Confirmeed Cases : {latest_cases_data['totalconfirmed']}
Total Recovered Cases : {latest_cases_data['totalrecovered']}
Total Deaths Reported: {latest_cases_data['totaldeceased']}
Confirmed Cases Yesterday: {latest_cases_data['dailyconfirmed']}
Confirmed Recovered Cases Yesterday: {latest_cases_data['dailyrecovered']}
Deaths Reported Yesterday: {latest_cases_data['dailydeceased']}
******************************
'''
print(formatted_data)
except:
print('An error occurred while processing data')
def get_top5_states_with_active_cases(response):
try:
all_states_data_list = response.json()['statewise']
all_states_data_list.sort(
key=lambda x: int(x['active']), reverse=True)
top5_active_states = all_states_data_list[1:6]
print('Top 5 states with most active cases in India:')
for index, state in enumerate(top5_active_states):
formatted_data = f'''
********{index + 1}*************
State: {state['state']}
Active: {state['active']}
Total Confirmed : {state['confirmed']}
***************************
'''
print(formatted_data)
except Exception as error:
print(f'An error occured while processing data, {error}')
if __name__ == '__main__':
get_daily_stats(response)
get_top5_states_with_active_cases(response)
基于我在JavaScript的认知,我经常使用.方法获取JSON对象数据,但在Python中不是这样。在这里我们获取对象数据使用的是中括号[]。这又一次刷新了我的认知。
这个脚本可以托管在服务器,如果我们想每天自动的获取数据,可以让它每天运行。
除了构建简单的COVID-追踪器,我还尝试使用非常便利的www.tweepy.org/ 库构建了一个简版的推特机器人,该库在推特API上提供了一个包装器来自动化任务。已经有很多关于这些内容的文章,我把链接放在下面。
下面是一些使用Python编写脚本的参考文章。
在接下来的几天里,我会在项目中探索更多Python脚本的内容,解锁新技能。脚本帮助我们将很多单调冗余的任务自动化,将它们委托给计算机,这样我们就可以专注于编程的其他重要方面了。
明天我会深入另一个有趣的领域——Python网络爬虫,在探索基础知识的同时寻找新的可能性。