在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()
在上面的代码中,我们首先导入了HTTPServer和BaseHTTPRequestHandler类。BaseHTTPRequestHandler是一个实现了HTTP协议的基类,我们需要继承它并重写其中的方法来处理HTTP请求。
接下来定义了一个自定义的请求处理类MyHTTPRequestHandler,其中重写了do_GET方法用于处理GET请求。在do_GET方法中,我们通过self.path获取到请求的URL,并使用urllib.request.urlopen发送HTTP请求获取网页内容。
然后设置了响应头,发送200表示成功,设置了Content-type为text/html,表示返回的是HTML格式的文本。
最后,将获取到的网页内容通过self.wfile.write方法返回给客户端。
最后在run函数中,创建了一个HTTPServer实例,并指定了服务器地址和请求处理类,然后启动服务器并持续监听请求。
运行代码后,在浏览器中访问http://localhost:8000/,可以看到返回的网页内容即为请求的URL对应的网页内容。
需要注意的是,上述代码只是一个简单的示例,可能无法处理一些复杂的网页。实际使用中,可能需要使用更强大的第三方库如requests来处理HTTP请求和网页解析。
