You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Python代码为每个外部CSS链接生成独立内容文件?

修改方案

要实现为每个外部CSS链接生成独立的CSS文件,需要做以下几个关键调整:

  • 处理相对路径的CSS链接:用urllib.parse.urljoin把页面URL和相对路径拼接成完整的请求地址
  • 遍历每个外部CSS链接,发送请求获取对应CSS内容
  • 为每个CSS文件生成唯一文件名(比如按序号命名,或从链接提取文件名)
  • 增加异常处理,避免单个CSS请求失败导致整个程序中断

以下是修改后的完整代码:

import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin

def page_Css(page_html, base_url):
    # 查找所有外部CSS链接
    external_css = page_html.find_all('link', rel="stylesheet")
    # 查找所有内部CSS
    internal_css = page_html.find_all('style')

    # 打印统计信息
    print(f"{base_url} 页面包含 {len(external_css)} 个外部CSS标签")
    print(f"{base_url} 页面包含 {len(internal_css)} 个内部CSS标签")

    # 写入内部CSS到文件
    with open("internal_css.css", "w", encoding='utf-8') as file:
        for index, css_code in enumerate(internal_css):
            if css_code.string:  # 避免空内容导致报错
                file.write(f"\n  //{index+1} Style\n")
                file.write(css_code.string)

    # 下载并保存每个外部CSS到独立文件
    for index, css_tag in enumerate(external_css):
        css_href = css_tag.get('href')
        if not css_href:
            print(f"第 {index+1} 个CSS链接为空,跳过")
            continue
        
        # 拼接完整URL(处理相对路径)
        full_css_url = urljoin(base_url, css_href)
        print(f"正在下载第 {index+1} 个CSS: {full_css_url}")
        
        try:
            # 请求CSS内容
            css_response = requests.get(full_css_url, timeout=10)
            css_response.raise_for_status()  # 检查请求是否成功
            
            # 生成文件名:方案1-按序号命名(稳定无冲突)
            filename = f"external_css_{index+1}.css"
            # 方案2-从URL提取文件名(可选,需处理特殊情况)
            # filename = full_css_url.split('/')[-1] if full_css_url.split('/')[-1].endswith('.css') else f"external_css_{index+1}.css"
            
            # 写入CSS内容到文件
            with open(filename, "w", encoding='utf-8') as file:
                file.write(css_response.text)
            print(f"已保存到 {filename}")
        except Exception as e:
            print(f"下载第 {index+1} 个CSS失败: {str(e)}")

# 目标页面URL
url = "https://www.geeksforgeeks.org/"

# 发送请求获取页面内容
response = requests.get(url)
response.raise_for_status()  # 检查页面请求是否成功

# 解析HTML
page_html = BeautifulSoup(response.text, 'html.parser')

# 提取并保存CSS
page_Css(page_html, url)

关键修改说明

  1. 传入base_url参数:将页面URL传入函数,用于拼接相对路径的CSS链接,解决相对URL无法直接请求的问题
  2. 异常处理:捕获请求过程中的网络错误、HTTP错误等,确保单个CSS下载失败不会中断整个程序
  3. 编码处理:打开文件时指定encoding='utf-8',避免中文或特殊字符出现乱码
  4. 空内容检查:内部CSS部分增加非空判断,避免写入空内容导致报错
  5. 文件名方案:提供两种命名方式,序号命名更稳定,适合大多数场景;从URL提取文件名更贴合原资源命名,需处理无后缀或特殊字符情况

内容的提问来源于stack exchange,提问作者Smelt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 00:06:19