webbrowser 模块本身不能获取网页的源代码。

(图片来源网络,侵删)
webbrowser 模块的主要功能是控制你系统默认的浏览器,比如打开一个 URL,或者在新的标签页中打开它,它是一个“控制器”,而不是一个“下载器”。
正确的工具:requests 模块
要获取网页的源代码(即 HTML 内容),你应该使用专门为 HTTP 请求设计的库,最常用、最简单的是 requests 库。
requests 库让你能以编程方式向网站服务器发送请求,并接收服务器返回的响应,其中就包含了网页的 HTML 源代码。
步骤 1: 安装 requests 库
如果你的 Python 环境中还没有安装 requests,请先打开终端或命令行工具,运行以下命令:

(图片来源网络,侵删)
pip install requests
步骤 2: 使用 requests 获取源代码
下面是一个完整的、可运行的示例代码。
import requests
# 1. 定义你想要获取源代码的 URL
# 这里以维基百科的 Python 页面为例
url = 'https://zh.wikipedia.org/wiki/Python'
try:
# 2. 发送 GET 请求
# requests.get() 会向指定的 URL 发送一个 HTTP GET 请求
# response 对象包含了服务器的所有响应信息
response = requests.get(url)
# 3. 检查请求是否成功
# response.status_code 会返回 HTTP 状态码
# 200 表示成功,404 表示未找到,403 表示禁止访问等
response.raise_for_status() # 如果状态码不是 200,会抛出 HTTPError 异常
# 4. 获取并打印网页源代码
# response.text 属性包含了网页的 HTML 内容(源代码)
# .text 会自动根据响应头部的 Content-Encoding 进行解码
html_source_code = response.text
# 打印源代码的前 500 个字符作为示例
print("成功获取网页源代码!以下是前 500 个字符:")
print("-" * 50)
print(html_source_code[:500])
print("-" * 50)
# 如果你需要将整个源代码保存到文件中
# with open('python_wiki_source.html', 'w', encoding='utf-8') as f:
# f.write(html_source_code)
# print("\n源代码已保存到 python_wiki_source.html 文件中。")
except requests.exceptions.HTTPError as http_err:
print(f"HTTP 错误发生: {http_err}")
except requests.exceptions.ConnectionError as conn_err:
print(f"连接错误发生: {conn_err}")
except requests.exceptions.Timeout as timeout_err:
print(f"请求超时: {timeout_err}")
except requests.exceptions.RequestException as err:
print(f"其他错误发生: {err}")
代码解释:
import requests: 导入requests库。url = '...': 设置目标网址。response = requests.get(url): 这是核心步骤,它向url发送一个 GET 请求,并将服务器的响应保存在response对象中。response.raise_for_status(): 这是一个非常好的编程习惯,它会检查响应的状态码,如果状态码表示错误(404, 500),它会立即停止程序并抛出异常,这样可以让你快速发现网络问题。html_source_code = response.text: 从响应对象中获取文本内容,也就是我们想要的 HTML 源代码。try...except块: 网络请求非常不稳定,可能会因为各种原因失败(如网络中断、服务器宕机、URL 错误等),使用try...except可以让你的程序更加健壮,在遇到错误时不会直接崩溃,而是会打印出友好的错误信息。
webbrowser 和 requests 的对比与配合
虽然 webbrowser 不能获取源代码,但你可以将它和 requests 结合起来使用,实现一个更强大的功能:先下载网页源代码,然后用浏览器打开它。
这在某些调试场景下非常有用,比如你想看看你通过程序修改后的 HTML 是什么样子的。
import requests
import webbrowser
import tempfile
def download_and_open_in_browser(url):
"""下载网页源代码并用系统默认浏览器打开它。"""
try:
# 1. 使用 requests 获取源代码
response = requests.get(url)
response.raise_for_status()
html_content = response.text
# 2. 创建一个临时文件
# delete=False 表示文件在关闭后不会被自动删除
# 我们需要在浏览器打开后手动删除它
with tempfile.NamedTemporaryFile(mode='w', delete=False, suffix='.html', encoding='utf-8') as temp_file:
# 3. 将源代码写入临时文件
temp_file.write(html_content)
temp_file_path = temp_file.name # 获取文件的完整路径
# 4. 使用 webbrowser 在新标签页中打开这个临时文件
# file:// 协议告诉 webbrowser 打开一个本地文件
webbrowser.open(f'file://{temp_file_path}', new=2)
print(f"网页已下载并用浏览器打开,临时文件路径: {temp_file_path}")
print("这个临时文件需要手动删除。")
except requests.exceptions.RequestException as e:
print(f"下载网页时出错: {e}")
# --- 调用函数 ---
download_and_open_in_browser('https://www.python.org')
| 功能 | webbrowser 模块 |
requests 库 |
|---|---|---|
| 主要用途 | 控制系统默认浏览器 | 发送 HTTP 请求 |
| 能否获取源代码 | 不能 | 能 (通过 response.text) |
| 核心方法 | webbrowser.open(url) |
requests.get(url) |
| 适用场景 | 简单地打开网页进行浏览 | 爬虫、API 调用、自动化测试、获取网页数据 |
如果你需要获取网页的源代码,请直接使用 requests 库。webbrowser 是用来“打开”网页的,而 requests 是用来“获取”网页内容的。

(图片来源网络,侵删)
