欢迎访问宙启技术站
智能推送

在Python中使用HTTPServer()模块实现一个简单的网页爬虫

发布时间:2024-01-11 14:46:50

在Python中,我们可以使用HTTPServer()模块来实现一个简单的网页爬虫。HTTPServer()是Python标准库中的一个类,它可以创建一个简单的HTTP服务器,用于接收和处理HTTP请求。

下面是一个使用HTTPServer()模块实现的简单网页爬虫的示例代码:

from http.server import HTTPServer, BaseHTTPRequestHandler
import urllib.request


class MyHTTPRequestHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        try:
            # 获取请求的URL
            url = self.path[1:]

            # 发送HTTP请求,获取网页内容
            response = urllib.request.urlopen(url)
            html = response.read().decode()

            # 设置响应头
            self.send_response(200)
            self.send_header('Content-type', 'text/html')
            self.end_headers()

            # 将网页内容返回给客户端
            self.wfile.write(html.encode())

        except:
            # 处理异常情况
            self.send_response(404)
            self.send_header('Content-type', 'text/html')
            self.end_headers()
            self.wfile.write(b'404 Not Found')


def run():
    # 创建一个HTTP服务器,并指定请求处理类
    server_address = ('', 8000)
    httpd = HTTPServer(server_address, MyHTTPRequestHandler)
    print('Starting server at http://localhost:8000')
    httpd.serve_forever()


if __name__ == '__main__':
    run()

在上面的代码中,我们首先导入了HTTPServerBaseHTTPRequestHandler类。BaseHTTPRequestHandler是一个实现了HTTP协议的基类,我们需要继承它并重写其中的方法来处理HTTP请求。

接下来定义了一个自定义的请求处理类MyHTTPRequestHandler,其中重写了do_GET方法用于处理GET请求。在do_GET方法中,我们通过self.path获取到请求的URL,并使用urllib.request.urlopen发送HTTP请求获取网页内容。

然后设置了响应头,发送200表示成功,设置了Content-typetext/html,表示返回的是HTML格式的文本。

最后,将获取到的网页内容通过self.wfile.write方法返回给客户端。

最后在run函数中,创建了一个HTTPServer实例,并指定了服务器地址和请求处理类,然后启动服务器并持续监听请求。

运行代码后,在浏览器中访问http://localhost:8000/,可以看到返回的网页内容即为请求的URL对应的网页内容。

需要注意的是,上述代码只是一个简单的示例,可能无法处理一些复杂的网页。实际使用中,可能需要使用更强大的第三方库如requests来处理HTTP请求和网页解析。