返回

高速下载器(四):通用请求类

后端

记不记得前几天在“爬虫之—— 常用技术下”中提到的 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 类,我们可以更加方便地发送各种各样的网络请求,这极大地提高了爬虫开发的效率。

希望这个教程对你有帮助!如果你有任何问题,请随时留言。