1. Requests库介绍
Requests是一个Python第三方库,它是用来发送HTTP请求的。使用Python自带的urllib库虽然也可以发送HTTP请求,但是使用起来比较麻烦,而且有些功能比较难以实现。相比之下,Requests库更加简单易用,代码易懂。在Requests中,可以设置头部信息,发送POST、GET等请求方式,操作cookies等等。
2. Requests中的get()方法
在Requests库中,发送GET请求需要使用get()方法。下面是get()方法的基本用法:
import requests
response = requests.get(url, params=None, **kwargs)
其中,url是访问链接,params是链接中需要传递的参数,kwargs是可选参数,比如headers、cookies、proxies等。
下面将逐一介绍get()方法中的各个参数:
2.1 url参数
url参数代表要访问的链接。在实际使用中,我们可以使用url参数拼出所要访问的链接。比如:
import requests
city = 'Beijing'
url = 'https://www.baidu.com/s?wd=' + city
response = requests.get(url)
上述代码中,我们通过url参数拼接出了一个百度搜索北京的链接,并使用get()方法访问了该链接。
2.2 params参数
params参数代表要在链接中传递的参数。在实际使用中,我们可以将params参数传递给get()方法,get()方法会将params参数自动添加到url中。比如:
import requests
params = {'key1': 'value1', 'key2': 'value2'}
url = 'https://httpbin.org/get'
response = requests.get(url, params=params)
上述代码中,我们定义了一个params字典,然后将params字典作为get()方法的params参数传递进去。get()方法会自动将params字典中的键值对拼接成一个查询字符串,并添加到url中。如果运行上述代码,会返回一个JSON对象,其中包含了params参数传递进去后的查询字符串:
{
"args": {
"key1": "value1",
"key2": "value2"
},
"headers": {
"Host": "httpbin.org",
"User-Agent": "python-requests/2.26.0",
"Accept-Encoding": "gzip, deflate, br",
"Accept": "*/*",
"Connection": "keep-alive"
},
"url": "https://httpbin.org/get?key1=value1&key2=value2"
}
可以看到,在返回的JSON对象中,args字段中包含了我们传递的params参数。
2.3 可选参数
2.3.1 headers参数
headers参数代表请求头部信息。在实际使用中,有些网站需要在请求头中传递一些特定的信息,才能正常访问。比如:
import requests
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
url = 'https://www.baidu.com'
response = requests.get(url, headers=headers)
上述代码中,我们定义了一个headers字典,并将headers字典作为get()方法的headers参数传递进去。get()方法会在发送请求时,自动将headers字典中的信息添加到请求头中。在实际使用中,我们可以根据不同的网站,自行定义对应的headers字典。
2.3.2 cookies参数
cookies参数代表发送请求时带上的cookies信息。如果需要在发送请求时携带会话信息,比如登录状态等,可以将cookies信息传递给get()方法。比如:
import requests
cookies = {'key1': 'value1', 'key2': 'value2'}
url = 'https://www.baidu.com'
response = requests.get(url, cookies=cookies)
上述代码中,我们定义了一个cookies字典,并将cookies字典作为get()方法的cookies参数传递进去。get()方法会在发送请求时,自动将cookies字典中的信息添加到请求头的Cookie字段中。
2.3.3 proxies参数
proxies参数代表使用的代理服务器。在实际使用中,有些网站可能会限制同一IP地址的访问次数,为了避免这种情况,可以使用代理服务器来发送请求。比如:
import requests
proxies = {'http': 'http://10.10.1.10:3128', 'https': 'https://10.10.1.10:1080'}
url = 'https://www.baidu.com'
response = requests.get(url, proxies=proxies)
上述代码中,我们定义了一个proxies字典,并将proxies字典作为get()方法的proxies参数传递进去。get()方法会在发送请求时,自动将请求发送到指定的代理服务器。在实际使用中,我们需要根据代理服务器的具体情况,设置不同的代理服务器参数。
3. 经典案例:天气查询
在讲解Requests库的get()方法使用过程中,我们来看一个经典案例:天气查询。
现在,我们需要编写一个程序,根据用户输入的城市名称,自动查询该城市的天气信息。在本例中,我们将使用天气API,来获取城市的天气信息。
首先,我们需要准备一个含有城市名称的列表,用来生成查询链接:
cities = ['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen']
接下来,我们需要遍历该列表,逐个生成查询链接,并发送get()请求获取天气信息:
import requests
cities = ['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen']
for city in cities:
url = f'http://t.weather.sojson.com/api/weather/city/{city}'
response = requests.get(url)
weather = response.json().get('data').get('forecast')[0]
print(f'{city}:{weather.get("high")},{weather.get("low")},{weather.get("type")}')
在上述代码中,我们使用了f-string格式化字符串,将城市名称插入到查询链接中,生成了一个完整的查询链接。然后,使用get()方法发送get请求,获取返回的响应。从响应中,我们可以通过json()方法,获取返回的JSON数据,并使用get()方法,获取其中的所需信息。由于该API返回的数据中,forecast列表中的第一个元素,即forecast[0],包含的是当天的天气信息,因此我们只获取了forecast[0]的信息。
运行上述代码,将得到如下结果:
Beijing:12℃,1℃,晴
Shanghai:17℃,13℃,小雨
Guangzhou:20℃,15℃,小雨转多云
Shenzhen:20℃,16℃,阴
从结果中可以看出,我们成功地获取了城市的天气信息,并将其打印输出了出来。
4. 总结
本文主要讲解了Requests库的get()方法的基本用法以及常用参数的使用方法。通过本文的介绍,您应该已经掌握了如何使用get()方法发送GET请求,并了解了如何使用常用的可选参数,比如headers、cookies、proxies等。此外,我们还以天气查询为例,演示了如何使用Requests库发送get()请求,获取API返回的天气信息。希望本文对您有所帮助。