news 2026/6/7 18:37:34

Python 教程:下载网页并将资源改为本地相对路径

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python 教程:下载网页并将资源改为本地相对路径

一、教程目标

本教程实现以下功能:

  1. 下载指定 URL 的 HTML 页面

  2. 自动下载页面中引用的:

    • CSS 文件
    • JS 文件
    • 图片(img)
  3. 解析 CSS 文件中的:

    • 背景图片(url(…))
    • 字体文件(@font-face)
  4. 将 HTML 和 CSS 中的外链资源全部修改为本地相对路径

  5. 最终生成一个可离线访问的网页目录

适合用于:

  • 网页备份
  • 离线浏览
  • 页面模板保存
  • 简单静态站点克隆

二、环境准备

1. Python 版本

建议使用 Python 3.7 及以上版本

2. 安装依赖库

pipinstallrequests beautifulsoup4

三、完整代码(中文注释版)

importosimportrequestsfrombs4importBeautifulSoupfromurllib.parseimporturlparse,urljoinimportredefdownload_file(url,folder):""" 下载单个文件并保存到指定目录 :param url: 文件的绝对 URL :param folder: 保存目录 """response=requests.get(url)ifresponse.status_code==200:# 从 URL 中解析出文件名filename=os.path.basename(urlparse(url).path)save_path=os.path.join(folder,filename)# 以二进制方式写入文件withopen(save_path,'wb')asf:f.write(response.content)defdownload_and_modify_links(html_url,save_folder,domain_to_remove):""" 下载 HTML 页面,并将其中的 CSS、JS、IMG 等资源下载到本地, 同时把所有链接修改为相对路径 :param html_url: 目标网页 URL :param save_folder: 本地保存目录 :param domain_to_remove: 预留参数(当前版本未使用) """response=requests.get(html_url)ifresponse.status_code!=200:print(f"页面下载失败,状态码:{response.status_code}")return# 使用 BeautifulSoup 解析 HTMLsoup=BeautifulSoup(response.text,'html.parser')# 创建保存资源的目录os.makedirs(save_folder,exist_ok=True)# 处理 link、img、script 标签# link -> CSS# img -> 图片# script -> JSfortag,attributein[('link','href'),('img','src'),('script','src')]:elements=soup.find_all(tag,{attribute:True})forelementinelements:original_link=element[attribute]# 将相对路径转换为绝对路径absolute_link=urljoin(html_url,original_link)# 提取文件名filename=os.path.basename(urlparse(absolute_link).path)ifnotfilename:continue# 修改 HTML 中的引用为相对路径element[attribute]=f"./{filename}"# 下载资源文件download_file(absolute_link,save_folder)# 单独处理 CSS 文件,解析其中的图片和字体css_elements=soup.find_all('link',{'rel':'stylesheet'})forcss_elementincss_elements:css_url=urljoin(html_url,css_element['href'])css_response=requests.get(css_url)ifcss_response.status_code!=200:continuecss_text=css_response.text# 处理 CSS 中的 url(...) 图片image_urls=re.findall(r'url\((.*?)\)',css_text)forimage_urlinimage_urls:clean_url=image_url.strip('\'"')absolute_image_url=urljoin(css_url,clean_url)filename=os.path.basename(urlparse(absolute_image_url).path)ifnotfilename:continue# 替换 CSS 中的路径为本地相对路径css_text=css_text.replace(image_url,f"./{filename}")# 下载图片download_file(absolute_image_url,save_folder)# 处理 @font-face 中的字体文件font_urls=re.findall(r'@font-face.*?url\((.*?)\)',css_text,re.S)forfont_urlinfont_urls:clean_url=font_url.strip('\'"')absolute_font_url=urljoin(css_url,clean_url)filename=os.path.basename(urlparse(absolute_font_url).path)ifnotfilename:continuecss_text=css_text.replace(font_url,f"./{filename}")download_file(absolute_font_url,save_folder)# 保存修改后的 CSS 文件css_filename=os.path.basename(urlparse(css_url).path)css_save_path=os.path.join(save_folder,css_filename)withopen(css_save_path,'w',encoding='utf-8')asf:f.write(css_text)# 修改 HTML 中的 CSS 引用路径css_element['href']=f"./{css_filename}"# 保存最终修改后的 HTML 文件html_save_path=os.path.join(save_folder,'index.html')withopen(html_save_path,'w',encoding='utf-8')asf:f.write(str(soup))print("HTML 页面及相关资源已成功下载并本地化")

四、主程序入口示例

if__name__=="__main__":html_url="http://example.com/"save_folder="downloaded_files"domain_to_remove="http://example.com"download_and_modify_links(html_url,save_folder,domain_to_remove)

五、运行结果目录结构示例

downloaded_files/ ├── index.html

打开index.html即可离线访问网页。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/30 21:12:38

YOLOFuse DEYOLO实现方案解析:学术前沿技术工程化落地

YOLOFuse DEYOLO实现方案解析:学术前沿技术工程化落地 在智能安防、自动驾驶与夜间监控等现实场景中,传统基于可见光的目标检测系统常因光照不足、雾霾遮挡或热源干扰而失效。一个典型的例子是:深夜街道上,普通摄像头难以分辨静止…

作者头像 李华
网站建设 2026/6/2 3:04:50

YOLOFuse Kubernetes部署方案:大规模集群调度设想

YOLOFuse Kubernetes部署方案:大规模集群调度设想 在城市安防摄像头昼夜轮转、无人机巡检穿越浓雾、工厂质检设备穿透烟尘的现实场景中,单一可见光图像早已无法满足全天候感知需求。低光照下细节丢失、烟雾遮挡导致误检——这些痛点正推动多模态目标检测…

作者头像 李华
网站建设 2026/6/2 17:07:07

YOLOFuse和JavaScript、HTML、Vue前端技术有关吗?专注后端CV算法

YOLOFuse:专注后端CV算法的多模态检测利器 在夜间监控、消防救援或工业巡检中,我们常常面临一个棘手问题:光线不足时,传统摄像头几乎“失明”,而红外图像虽能捕捉热源,却缺乏细节和颜色信息。如何让机器“…

作者头像 李华
网站建设 2026/5/30 20:21:26

YOLOFuse抖音短视频创意:15秒展示检测效果

YOLOFuse抖音短视频创意:15秒展示检测效果 在城市夜幕降临、监控画面逐渐模糊的时刻,传统摄像头常常“失明”——行人隐入黑暗,车辆轮廓难辨。而另一边,红外成像虽能捕捉热源,却缺乏细节与色彩信息。如何让AI既“看得清…

作者头像 李华
网站建设 2026/5/30 21:11:39

YOLOFuse runs/predict/exp路径查看方法:推理图片输出位置确认

YOLOFuse 推理输出路径解析:如何快速定位 runs/predict/exp 中的检测结果 在夜间监控、工业巡检或无人机感知系统中,单一可见光图像常因光照不足而失效。此时,融合红外(IR)与RGB图像的多模态目标检测技术便成为破局关键…

作者头像 李华
网站建设 2026/5/30 22:08:06

深耕产教融合沃土,共筑电商人才高地:慧策旺店通与阳光学院达成战略合作

在数字经济浪潮席卷全球、电商产业深度重构商业格局的当下,人才已成为驱动行业持续进化的核心引擎。近日,服务数十万电商企业的全价值链服务商慧策旺店通,与享誉应用型人才培养领域的阳光学院正式签署战略合作协议。双方将共建“实训基地”与…

作者头像 李华