3 GET请求
- HTTP中最常见的请求之一就是GET请求,首先来详细了解一下利用requests库构建GET请求的方法
- 基本实例
- 下面构建一个最简单的GET请求,请求的链接为https://www.httpbin.org/get ,该网站会判断客户端发起的是否为GET请求,如果是,那么它将返回相应的请求信息:
import requests
r = requests.get('https://www.httpbin.org/get')
print(r.text)
- 运行结果如下:
{
"args": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate, br, zstd",
"Host": "www.httpbin.org",
"User-Agent": "python-requests/2.33.1",
"X-Amzn-Trace-Id": "Root=1-6aa53c06-0fd60b422414de1d61b72609"
},
"origin": "183.212.84.126",
"url": "https://www.httpbin.org/get"
}
- 可以发现,我们成功发起了GET请求,返回结果中包含请求头、URL、IP等信息。
- 那么,对于GET请求,如果要附件额外的信息,一般怎么添加呢?例如现在想添加两个参数name和age,其中name是abner,age是25,于是URL就可以写成如下内容:
r = requests.get('https://www.httpbin.org/get?name=abner&age=25') - 这样也可以,但是看起来有点不人性化,这些参数还需要我们手动取拼接,实现起来着实不优雅。
- 一般情况下,我们利用params参数就可以直接传递这种信息了,实例如下:
import requests
data = {
'name':'abner',
'age':25
}
r = requests.get('https://www.httpbin.org/get', params=data)
print(r.text)
- 运行结果如下:
{
"args": {
"age": "25",
"name": "abner"
},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate, br, zstd",
"Host": "www.httpbin.org",
"User-Agent": "python-requests/2.33.1",
"X-Amzn-Trace-Id": "Root=1-6aa548a2-41b52ba745c9e98b0718efab"
},
"origin": "183.212.84.126",
"url": "https://www.httpbin.org/get?name=abner&age=25"
}
- 上面我们把URL参数以字典的形式传给get方法的params参数,通过返回信息我们可以判断,请求的链接自动被构造了https://www.httpbin.org/get?name=abner&age=25 ,这样我们就不用自己构造URL了,非常方便。
- 另外,网页的返回类型虽然是str类型,但是它很特殊,是JSON格式的。所以,如果想直接解析返回结果,得到一个JSON格式的数据,可以直接调用json方法。实例如下:
import requests
data = {
'name':'abner',
'age':25
}
r = requests.get('https://www.httpbin.org/get', params=data)
print(type(r.text))
print(r.json())
print(type(r.json()))
- 运行结果如下:
<class 'str'>
{'args': {'age': '25', 'name': 'abner'}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate, br, zstd', 'Host': 'www.httpbin.org', 'User-Agent': 'python-requests/2.33.1', 'X-Amzn-Trace-Id': 'Root=1-6aa549e6-6772152845d6f2747a2f8928'}, 'origin': '183.212.84.126', 'url': 'https://www.httpbin.org/get?name=abner&age=25'}
<class 'dict'>
- 可以发现,调用json方法可以将返回结果转化为字典。
- 但需要注意的是,如果返回结果不是JSON格式,就会出现解析错误,抛出json.decoder.JSONDecodeError异常。
- 添加请求头
- 我们知道,在发起HTTP请求的时候,会有一个请求头Request Headers,那么怎么设置这个请求头呢?
- 很简单,使用headers参数就可以完成了。
- 在刚才的实例中,实际上是没有设置请求头信息的,这样的话,某些网站会发现这并不是一个由正常浏览器发起的请求,于是可能会返回异常结果,导致网页抓取失败。
- 要添加请求头信息,例如这里我们想要添加一个User-Agent字段,就可以这么写:
import requests
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.0.0 Safari/537.36'
}
r = requests.get('https://www.httpbin.org/get', headers=headers)
print(r.text)
- 当然,可以在这个headers参数中添加任意其他字段的信息。
心揣信念,梦想就在脚下!

浙公网安备 33010602011771号