news 2026/6/15 15:49:08

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/6/14 18:08:43

python图片批处理系统

文章目录具体实现截图主要技术与实现手段系统设计与实现的思路系统设计方法java类核心代码部分展示结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!具体实现截图 本系统(程序源码数据库调试部署讲解)带文档1万…

作者头像 李华
网站建设 2026/6/15 13:09:40

YOLOFuse决策级融合鲁棒性强,但计算资源消耗略高

YOLOFuse:多模态融合中的鲁棒性与效率权衡 在智能安防、自动驾驶和夜间监控等实际场景中,单一可见光摄像头的局限性正变得愈发明显。低光照、烟雾遮挡或极端天气条件下,RGB图像往往模糊不清甚至完全失效,导致传统目标检测模型性能…

作者头像 李华
网站建设 2026/6/15 15:04:46

YOLOFuse与机器人比赛:RoboMaster参赛团队推荐

YOLOFuse与机器人比赛:RoboMaster参赛团队推荐 在一场激烈的 RoboMaster 比赛中,红方机器人突入烟雾区,视野几乎完全被遮蔽。传统视觉系统瞬间“失明”,连续丢失目标达半秒之久——这在高速对抗中足以决定胜负。而另一支队伍的机…

作者头像 李华
网站建设 2026/6/15 13:03:40

YOLOFuse支持M1/M2芯片吗?MacOS用户使用须知

YOLOFuse 支持 M1/M2 芯片吗?MacOS 用户使用须知 在智能视觉系统快速演进的今天,多模态目标检测正成为应对复杂环境的关键技术。尤其是在夜间安防、烟雾遮挡或低光照场景下,仅依赖 RGB 图像的传统模型往往力不从心。而融合红外(IR…

作者头像 李华
网站建设 2026/6/15 13:34:50

YOLOFuse与碳中和目标:绿色AI节能计算

YOLOFuse与碳中和目标:绿色AI节能计算 在智能安防、自动驾驶和灾害救援等关键场景中,环境的复杂性常常让传统视觉系统“失明”——夜间、浓烟、雾霾下,可见光摄像头几乎无法捕捉有效信息。而与此同时,红外传感器虽然能感知热源&am…

作者头像 李华
网站建设 2026/6/15 13:30:39

YOLOFuse在农业监测中的应用:夜间作物巡检新方案

YOLOFuse在农业监测中的应用:夜间作物巡检新方案 在一片漆黑的稻田上空,无人机悄然掠过。可见光相机拍下的画面几乎全黑,但红外传感器却捕捉到了几处异常的热源——那是夜间活动的老鼠群落正啃食秧苗。如果仅依赖传统视觉模型,这些…

作者头像 李华