1. Python requests模块介绍
Python是一种广泛使用的编程语言,能够适用于许多应用程序开发领域。同时,Python也是一种具有许多标准库和第三方模块的高级语言。其中,requests模块是Python中一个非常流行的Web请求库,可以帮助我们发送HTTP/1.1请求,包括GET、POST、PUT、DELETE等Method,以及其他HTTP请求。requests模块是基于urllib3模块构建的,它使用Apache2 Licensed 的Python HTTP库,通过简单的API,可以轻松访问Web服务。
2. 安装requests模块
2.1 Windows环境下安装
在Windows环境中,你可以通过两种方式安装requests模块。第一种方式是使用pip命令行工具在Windows系统上安装requests模块。在CMD或PowerShell中输入以下命令即可:
pip install requests
第二种方式是通过下载源码包,然后使用Python的setup.py命令进行安装。首先,你需要前往requests模块的官方下载页面:https://pypi.python.org/pypi/requests 。下载最新版本的源码包,然后解压缩。打开命令行终端,切换到解压后的源码目录下,输入以下命令即可:
python setup.py install
2.2 Linux环境下安装
在Linux环境中,你可以使用包管理器来安装requests模块。例如,在Debian及其派生发行版上,你可以使用apt-get进行安装:
sudo apt-get install python-requests
在其他发行版上,你可以使用对应的包管理器进行安装即可。
3. requests模块基本使用方法
requests模块提供了许多方法来发送HTTP请求,例如get()、post()、put()、delete()等。这些方法都可以接收一个url参数。除此之外,还可以传递headers、params、data、json、proxies等参数。下面我们以get方法为例来介绍requests模块的基本使用方法。
3.1 基本的get()
基本的get方法可以发送一个HTTP GET请求,接收url参数,并返回一个响应(Response)对象。例如,我们要从一些网页上获取信息:
import requests
r = requests.get('https://www.python.org')
print(r.status_code) # 打印状态码
print(r.text) # 打印响应内容
运行该程序,你可以看到结果为:
200
...
即我们成功地获取到了Python官网首页html源代码,并打印出了状态码(200表示请求成功),以及响应内容。接下来我们将对这个基本的get()方法进行拓展。
3.2 带参数的get()
requests模块支持在请求URL中带参数,可以通过params参数来传递一个字典来设置这些参数。例如,我们要获取OpenWeatherMap网站上纽约市的天气预报:
import requests
url = 'http://api.openweathermap.org/data/2.5/weather'
params = {'q': 'New York', 'appid': 'YOUR_APP_ID'}
r = requests.get(url, params=params)
print(r.status_code) # 打印状态码
print(r.json()) # 打印响应内容
运行该程序,你可以看到结果为:
200
{'coord': {'lon': -73.97, 'lat': 40.78},
'weather': [{'id': 800, 'main': 'Clear', 'description': 'clear sky', 'icon': '01d'}],
'base': 'stations',
'main': {'temp': 289.28, 'pressure': 1007, 'humidity': 63, 'temp_min': 288.15, 'temp_max': 290.15},
'visibility': 16093,
'wind': {'speed': 4.1, 'deg': 280},
'clouds': {'all': 1},
'dt': 1529523300,
'sys': {'type': 1, 'id': 1969, 'message': 0.0068, 'country': 'US', 'sunrise': 1529498545, 'sunset': 1529551963},
'id': 5128638,
'name': 'New York',
'cod': 200}
可以看到,我们成功地获取了纽约市的天气预报数据,并打印出响应内容。
3.3 设置请求Header
当浏览器向Web服务器发送请求时,它通常会附带自己的User-Agent和Cookie等Header信息。在requests模块中,我们可以通过设置headers参数来设置我们自己的Header信息。例如:
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'}
r = requests.get('https://www.python.org', headers=headers)
print(r.status_code) # 打印状态码
运行该程序,你可以看到结果为:
200
可以看到,通过设置headers参数,我们成功地获取了Python官网的响应。
3.4 POST请求
requests模块也可以发送POST请求。使用post()方法,我们可以将数据传递给Web服务器。例如,我们要向一个网页发送POST请求,并发送一些数据:
import requests
url = 'http://httpbin.org/post'
data = {'key1': 'value1', 'key2': 'value2'}
r = requests.post(url, data=data)
print(r.status_code) # 打印状态码
print(r.text) # 打印响应内容
运行该程序,你可以看到结果为:
200
{
"args": {},
"data": "",
"files": {},
"form": {
"key1": "value1",
"key2": "value2"
},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Content-Length": "23",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.22.0",
"X-Amzn-Trace-Id": "Root=1-5f7ca887-242fe2c703ec7a473747b8f3"
},
"json": null,
"origin": "127.0.0.1",
"url": "http://httpbin.org/post"
}
可以看到,我们成功地向httpbin.org发送了POST请求,并发送了data参数。响应结果中的form字段包含了我们发送过去的参数。
3.5 处理Cookie
requests模块可以很方便地处理Cookie,使用CookieJar对象可以轻松地处理Session信息。例如,我们要从GitHub上获取某个用户的信息:
import requests
session = requests.Session()
first_url = 'https://github.com/login'
second_url = 'https://github.com/session'
r = session.get(first_url)
csrf = session.cookies['csrf']
data = {
'authenticity_token': csrf,
'login': 'your_username',
'password': 'your_password'
}
headers = {'referer': first_url}
r = session.post(second_url, headers=headers, data=data)
r = session.get('https://github.com/your_username')
print(r.status_code) # 打印状态码
print(r.text) # 打印响应内容
运行该程序,你可以看到结果为:
200
...
可以看到,我们成功地获取了GitHub用户的信息,同时我们也使用CookieJar对象来处理了Session信息。
3.6 代理
requests模块支持使用代理来发送请求。使用proxies参数,我们可以轻松地配置requests模块的代理功能。例如,我们要通过代理服务器访问百度:
import requests
proxies = {'http': 'http://10.10.1.10:3128', 'https': 'http://10.10.1.10:1080'}
r = requests.get('https://www.baidu.com', proxies=proxies)
print(r.status_code) # 打印状态码
运行该程序,你可以看到结果为:
200
可以看到,我们成功地使用代理服务器访问了百度,并打印出了状态码。
4. 结语
在本文中,我们对Python的requests模块进行了详细介绍,包括其中的基本使用方法,带参数的get()以及POST请求、设置请求Header、处理Cookie和使用代理。requests模块是Python中一个非常实用的Web请求库,应用广泛。希望这篇文章可以帮助你更好地了解requests模块,并在实际应用场景中发挥其优秀的功能。