返回
高速下载器(四):通用请求类
后端
2023-12-25 01:56:44
记不记得前几天在“爬虫之—— 常用技术下”中提到的 httpx
框架,今天我们就使用这个框架封装一个网络请求的通用类。
为什么需要自己实现一个网络请求通用类呢?因为在实际的爬虫过程中,我们经常会遇到各种各样的网络请求,比如 GET、POST、DELETE 等,而且每个请求都有自己独特的请求头和请求参数,如果我们每次都要手工去编写这些请求代码,那实在是太麻烦了。
所以,我们封装一个网络请求通用类,可以让我们在爬虫过程中更加方便地发送各种各样的网络请求。
代码实现
首先,我们创建一个 Request
类,这个类包含了发送网络请求所需的所有信息,比如请求 URL、请求头、请求参数等。
class Request:
def __init__(self, url, method='GET', headers=None, params=None, data=None, json=None):
self.url = url
self.method = method
self.headers = headers or {}
self.params = params
self.data = data
self.json = json
然后,我们创建一个 Http
类,这个类负责发送网络请求并返回响应结果。
class Http:
def __init__(self):
self.client = httpx.Client()
def send(self, request):
response = self.client.request(request.method, request.url, headers=request.headers, params=request.params, data=request.data, json=request.json)
return response
最后,我们创建一个 RequestSender
类,这个类负责将 Request
对象发送给 Http
类并返回响应结果。
class RequestSender:
def __init__(self):
self.http = Http()
def send(self, request):
response = self.http.send(request)
return response
使用示例
现在,我们就可以使用 RequestSender
类来发送各种各样的网络请求了。
request_sender = RequestSender()
# GET 请求
response = request_sender.send(Request(url='https://www.example.com'))
# POST 请求
response = request_sender.send(Request(url='https://www.example.com', method='POST', data={'username': 'admin', 'password': '123456'}))
# DELETE 请求
response = request_sender.send(Request(url='https://www.example.com/1', method='DELETE'))
总结
通过使用 RequestSender
类,我们可以更加方便地发送各种各样的网络请求,这极大地提高了爬虫开发的效率。
希望这个教程对你有帮助!如果你有任何问题,请随时留言。