大数跨境

使用 Python 将我的终端变成了浏览器

使用 Python 将我的终端变成了浏览器 索引目录
2025-05-13
1
导读:可以构建一个完全在我的终端上运行的网络浏览器吗?没有 GUI,没有 Electron,只有 Python、套接字和 ANSI 转义码。
可以构建一个完全在我的终端上运行的网络浏览器吗?

没有 GUI,
没有 Electron,
只有 Python、套接字和 ANSI 转义码。


结果它教会了我比任何课程都多的HTTP、HTML 解析、TTY 渲染和套接字知识

关注【索引目录】服务号,更多精彩内容等你来探索!


为什么要这么做?

因为它:

  • 迫使你从原始层面理解 HTTP 请求和响应

  • 教你手动解析 HTML的基础知识

  • 展示如何在没有浏览器引擎的情况下重新创建渲染和布局

  • 非常有趣

另外,当您演示它时,您会看起来就像 90 年代电影中的黑客。


️ 它能做什么(以及不能做什么)

✅ 向任何 URL 发出 GET 请求
✅ 解析 HTML<title>和基本文本内容
✅ 删除脚本、样式和图像
✅ 在终端中呈现带有颜色的纯文本内容
无 CSS 或 JS
无图像或多媒体
无花哨的布局
... 目前还没有。


代码(简化)

让我们分解一下原型的关键部分:

1. 发出原始 HTTP 请求

import requests

url = input("Enter a URL: ")
response = requests.get(url)
html = response.text

2. 剥离并解析内容

from bs4 import BeautifulSoup

soup = BeautifulSoup(html, 'html.parser')
title = soup.title.string if soup.title else "No Title"
text = soup.get_text()

3. 使用 ANSI magic 进行渲染

from colorama import Fore, Style

print(Fore.CYAN + f"\n== {title} ==" + Style.RESET_ALL)
print(Fore.GREEN + text[:2000] + Style.RESET_ALL) # Truncated for now

奖励:像老板一样将标题居中

import shutil

columns = shutil.get_terminal_size().columns
print(Fore.CYAN + title.center(columns) + Style.RESET_ALL)

轰隆隆——你的终端就变成了一个非常原始的浏览器。


我的惨痛教训

  • 并非所有网站都返回 HTML(application/json否则text/plain会很快崩溃)

  • UTF-8 编码问题真实存在(而且很奇怪)

  • 许多页面需要用户代理——一些网站会阻止原始 Python 请求

解决方法示例:

headers = {'User-Agent': 'Mozilla/5.0'}
response = requests.get(url, headers=headers)

更高层次的想法

接下来您可以采取以下措施:

  • 添加带有输入的导航(例如“按下n下一个链接”)

  • 用于curses创建可滚动视图

  • 添加书签支持或历史记录

  • 尝试以纯文本形式呈现 HTML 表格

你不仅仅是在构建一个浏览器。你正在从头开始构建你的网络思维模型


为什么你应该尝试一下

大多数开发人员在非常高的层次上与 Web 进行交互——React 组件、API 端点、模板引擎。

这完全颠覆了这一点。你将学到:

  • 浏览器实际上对 HTML做了什么

  • 网络内容是如何构建和传输的

  • 你的终端里requests到底隐藏着多少能量BeautifulSoup


‍ 轮到你了

如果你是一名 Python 开发人员,那么这就是你的挑战:

无需浏览器,即可构建浏览器。
让网络顺应你的终端。
并非因为它有用,而是因为它能让你了解现代工具所隐藏的奥秘。

看看发生什么故障。**


【声明】内容源于网络
0
0
索引目录
索引目录是一家专注于医疗、技术开发、物联网应用等领域的创新型公司。我们致力于为客户提供高质量的服务和解决方案,推动技术与行业发展。
内容 444
粉丝 0
索引目录 索引目录是一家专注于医疗、技术开发、物联网应用等领域的创新型公司。我们致力于为客户提供高质量的服务和解决方案,推动技术与行业发展。
总阅读838
粉丝0
内容444