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

webbrowser获取网页源代码
(图片来源网络,侵删)

webbrowser 模块的主要功能是控制你系统默认的浏览器,比如打开一个 URL,或者在新的标签页中打开它,它是一个“控制器”,而不是一个“下载器”。


正确的工具:requests 模块

要获取网页的源代码(即 HTML 内容),你应该使用专门为 HTTP 请求设计的库,最常用、最简单的是 requests 库。

requests 库让你能以编程方式向网站服务器发送请求,并接收服务器返回的响应,其中就包含了网页的 HTML 源代码。

步骤 1: 安装 requests

如果你的 Python 环境中还没有安装 requests,请先打开终端或命令行工具,运行以下命令:

webbrowser获取网页源代码
(图片来源网络,侵删)
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}")

代码解释:

  1. import requests: 导入 requests 库。
  2. url = '...': 设置目标网址。
  3. response = requests.get(url): 这是核心步骤,它向 url 发送一个 GET 请求,并将服务器的响应保存在 response 对象中。
  4. response.raise_for_status(): 这是一个非常好的编程习惯,它会检查响应的状态码,如果状态码表示错误(404, 500),它会立即停止程序并抛出异常,这样可以让你快速发现网络问题。
  5. html_source_code = response.text: 从响应对象中获取文本内容,也就是我们想要的 HTML 源代码。
  6. try...except: 网络请求非常不稳定,可能会因为各种原因失败(如网络中断、服务器宕机、URL 错误等),使用 try...except 可以让你的程序更加健壮,在遇到错误时不会直接崩溃,而是会打印出友好的错误信息。

webbrowserrequests 的对比与配合

虽然 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 调用、自动化测试、获取网页数据

如果你需要获取网页的源代码,请直接使用 requestswebbrowser 是用来“打开”网页的,而 requests 是用来“获取”网页内容的。

webbrowser获取网页源代码
(图片来源网络,侵删)