您的位置:

学习Python网络爬虫之requests模块

Python作为一门高效便捷的编程语言,有着广泛的应用场景。其中,网络爬虫是Python应用最为精彩、实用的一个方向。requests模块可以说是网络爬虫领域中的瑞士军刀,它可以方便地操作HTTP请求和响应。本文将系统介绍requests模块,让读者更深入地理解并实现Python网络爬虫。

一、requests模块介绍

requests模块是Python中操作HTTP协议的第三方库,封装了HTTP请求、响应和URL处理等功能。它基于urllib3库,具有更好的性能和易用性。

import requests
response = requests.get('https://www.baidu.com')
print(response.text)

上述例子中,我们使用requests.get方法发起HTTP请求,get方法的参数为待获取页面的URL。并使用print打印出获取到的HTML页面源码。这是一个简单而直观的使用requests模块的方法。

二、requests的基本用法

1. 发送带参数的GET请求

在实际应用中,我们会经常需要带有参数的请求。requests模块提供了params参数来方便地传递参数。params参数是字典类型,它会将请求参数自动转换为url编码格式添加到URL中。

import requests
response = requests.get('https://www.baidu.com/s', params={'wd': 'Python 爬虫'})
print(response.url)

上述例子中,我们使用requests库的get方法向百度搜索发出GET请求,带上了一个wd参数,wd的值为Python 爬虫。由于URL中使用的是百度搜索的方式,因此我们可以在返回结果的URL中看到,参数已经被自动编码加入到URL中。最终我们可以得到搜索结果的HTML源代码。

2. 发送POST请求

发送POST请求和GET请求类似,使用方法稍微有些不同。通过传递data参数,可以将请求体添加到POST请求中。

import requests
data = {'username': 'admin', 'password': '123456'}
response = requests.post('http://www.xxx.com/login', data=data)

上述例子中,我们向http://www.xxx.com/login发出POST请求,带上了两个参数,分别是username和password。这是一个模拟用户登录的例子。

3. 响应内容

requests模块的response对象包含了响应内容的各种属性,如HTTP状态码、响应时间、响应头和响应体等等。

import requests
response = requests.get('https://www.baidu.com')
print(response.status_code)
print(response.headers)
print(response.content)
print(response.cookies)

这里只列举了一部分响应内容的属性,也可以通过response.text获得响应的文本内容。

4. 所有请求方法

requests模块提供了各种请求方法。除了上文介绍的get和post方法,还有put、delete、head、options等等。

import requests
response1 = requests.put('http://httpbin.org/put', data={'key': 'value'})
response2 = requests.delete('http://httpbin.org/delete')
response3 = requests.head('http://httpbin.org/get')
response4 = requests.options('http://httpbin.org/get')

三、requests的进阶用法

1. 添加请求头

实际应用中,有时候需要在请求头中添加一些信息来模拟浏览器访问。requests模块允许我们设置请求头的参数。

import requests
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
response = requests.get('https://www.baidu.com', headers=headers)

上述例子中,我们使用了User-Agent来模拟请求头。User-Agent是一个特殊的请求头,会告诉服务器请求的客户端信息。在这里,我们使用Mozilla/5.0(Windows NT 6.1; Win64; x64)模拟Chrome浏览器。

2. 处理Cookie

requests模块允许我们方便地处理Cookie信息。可以使用cookies参数来接收一个cookie字典。另外,requests模块还提供了便捷的Session对象来帮助我们保存Cookie信息。

import requests
session = requests.Session()
session.post('http://httpbin.org/post', data={'key': 'value'})
response = session.get('http://httpbin.org/get')

上述例子中,我们使用Session对象来保存请求中的Cookie信息,并在下一次请求中保留下来。

3. 处理代理

代理服务器是我们在爬取一些数据的时候常常会用到的一种方式。requests库提供了proxies参数来实现代理请求。

import requests
proxies = {
    "http": "http://10.10.1.10:3128",
    "https": "http://10.10.1.10:1080",
}
response = requests.get("http://www.baidu.com", proxies=proxies)

上述例子中,我们使用了一个代理服务器,连接到URL时会自动使用代理服务器的地址和端口进行连接。

4. 使用SSL证书

requests模块能够自动地检测和处理SSL证书问题。在某些情况下,我们可能需要手动指定证书文件。

import requests
response = requests.get('https://www.12306.cn', verify=False)
print(response.content.decode())

该例子中关键在于verify参数,如果不指定该参数或者值为True表示需要验证SSL证书,requests会把证书验证失败视为错误,如果值为False则不检查证书。在实际使用中,该参数不建议使用False,如需要指定本地证书,将该参数设置成证书路径即可。

总结

以上就是requests模块基本用法和进阶用法的介绍。requests模块作为Python爬虫领域中的入门级别的第三方库,具有易学、易用的优点,适合Python初学者快速入门。requests模块完美地整合了HTTP请求和响应的各种功能,让网络爬虫开发更加便捷。