python 爬虫请求模块requests详解

1. requests是什么

requests是Python中一个简单而又优美的HTTP请求库,它可以替代Python标准库中的urllib,支持HTTP协议的所有主要请求方法(GET, POST, PUT, DELETE, HEAD, OPTIONS和PATCH)。requests在Python爬虫中应用广泛,它可以模拟浏览器的请求,向指定的url地址发送请求并获取相应的数据。

2. requests的基本使用

requests的基本使用非常简单,在使用requests库之前需要使用pip安装。

$ pip install requests

2.1 发送GET请求

使用requests库发送GET请求非常简单,只需要调用requests库的get()方法即可,get()方法的参数是要请求的url地址,get()方法返回的是一个Response对象,Response对象中包含了HTTP响应的所有信息,可以通过Response对象的属性来获取。

import requests

url = 'https://www.baidu.com'

response = requests.get(url)

print(response)

print(response.status_code)

print(response.text)

在上面的代码中,使用requests库发送GET请求到百度首页并获取响应。代码中调用了response对象的三个属性,分别是status_code、text和content。status_code是HTTP响应的状态码,200表示请求成功;text是HTTP响应的内容,是一个字符串;content是HTTP响应的二进制数据,可用于下载文件。

2.2 发送POST请求

使用requests库发送POST请求也非常简单,只需要调用requests库的post()方法即可,post()方法的参数是要请求的url地址和要发送的数据。

import requests

url = 'https://httpbin.org/post'

data = {'key1': 'value1', 'key2': 'value2'}

response = requests.post(url, data=data)

print(response.status_code)

print(response.json())

在上面的代码中,使用requests库发送POST请求到一个测试网站httpbin.org的/post接口,并发送一个字典类型的数据。代码中调用了response对象的两个属性,分别是status_code和json。json属性可以将响应的数据转换成Python中的字典类型。

2.3 请求头的设置

有些网站对爬虫的限制比较严格,需要在发送请求时设置Headers,模拟浏览器的请求头,否则会被认为是爬虫而被封禁。使用requests库可以在发送请求时设置Headers,只需要在请求中添加headers参数即可。

import requests

url = 'https://www.baidu.com'

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.36'}

response = requests.get(url, headers=headers)

print(response.status_code)

print(response.text)

在上面的代码中,向百度发送请求时添加了一个Headers参数,Headers参数中指定了浏览器的User-Agent信息,让请求头看起来更像是浏览器的请求头。

2.4 请求参数的设置

有些url中包含参数,需要在请求中添加参数后才能正确访问,使用requests库可以在发起请求时添加参数,只需要在请求中添加params参数即可。

import requests

url = 'https://www.baidu.com/s'

params = {'wd': 'python'}

response = requests.get(url, params=params)

print(response.status_code)

print(response.text)

在上面的代码中,设置了一个params参数,params中包含了查询关键字的信息,requests会将params中的信息拼接到url后面发送给服务器。

2.5 文件上传

requests库也提供了文件上传的功能,可以在请求中上传本地文件,只需要在请求中添加files参数即可。

import requests

url = 'http://httpbin.org/post'

files = {'file': open('test.txt', 'rb')}

response = requests.post(url, files=files)

print(response.status_code)

print(response.text)

在上面的代码中,设置了一个files参数,files中包含了上传文件的信息,requests会将上传的文件信息组装成multipart/form-data格式发送给服务器。

3. requests的高级用法

requests库还提供了很多高级用法,可以模拟登录网站、使用代理IP等操作。

3.1 模拟登录

在爬虫的过程中,有些网站需要登录才能查看数据,这时需要模拟登录网站。使用requests库模拟登录网站需要先获取登录表单,然后发送带有登录信息的请求。

import requests

login_url = 'https://login.example.com'

data = {'username': 'admin', 'password': '123456'}

session = requests.Session()

# 获取登录表单

response = session.get(login_url)

login_data = {'csrf_token': 'xxxxxx', 'username': 'admin', 'password': '123456'}

# 发送登录请求

response = session.post(login_url, data=login_data)

# 访问需要登录才能查看的页面

page_url = 'https://example.com/page'

response = session.get(page_url)

print(response.status_code)

print(response.text)

在上面的代码中,首先使用Session对象创建了一个会话,然后发送了一个GET请求获取登录表单,获取到登录表单后,获取表单中的csrf_token和登录账号、密码,然后使用POST方式发送登录请求,最后使用Session对象发送GET请求访问需要登录后才能查看的页面。

3.2 使用代理IP

在爬虫的过程中,有些网站会对爬虫进行限制,甚至会针对IP进行封禁,这时需要使用代理IP来解决这个问题。使用requests库使用代理IP也很简单,只需要在请求中添加proxies参数即可。

import requests

url = 'https://www.example.com'

proxies = {'http': 'http://10.10.1.10:3128', 'https': 'http://10.10.1.10:1080'}

response = requests.get(url, proxies=proxies)

print(response.status_code)

print(response.text)

在上面的代码中,设置了一个proxies参数,proxies中包含了代理IP的信息,requests会将请求发给代理服务器,代理服务器再转发请求给目标服务器,这样就可以避免被封禁。

4. 总结

通过本文的介绍,我们可以了解到requests库的基本使用、请求头的设置、请求参数的设置、文件上传、模拟登录和使用代理IP等高级用法。requests库是一个非常优秀的HTTP请求库,由于其简单易用、功能强大,在Python爬虫中被广泛应用。

后端开发标签