news 2026/4/13 14:18:47

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/4/14 7:32:40

YOLOFuse代码结构解读:模块化设计便于二次开发与扩展

YOLOFuse代码结构解读:模块化设计便于二次开发与扩展 在智能安防、夜间监控和自动驾驶等现实场景中,单一可见光图像常常因低光照、雾霾或遮挡而失效。此时,红外(IR)图像凭借其对热辐射的敏感性,能够提供互补…

作者头像 李华
网站建设 2026/4/14 6:47:22

毕业设计 stm32 RFID员工打卡门禁系统(源码+硬件+论文)

文章目录 0 前言1 主要功能2 硬件设计(原理图)3 核心软件设计4 实现效果5 最后 0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉…

作者头像 李华
网站建设 2026/4/12 19:13:49

YOLOFuse剪枝与蒸馏:进一步缩小模型体积

YOLOFuse剪枝与蒸馏:进一步缩小模型体积 在智能安防、夜间巡检和自动驾驶等现实场景中,单一可见光摄像头常常“力不从心”——夜幕降临、烟雾弥漫时,图像细节迅速退化,传统目标检测算法的准确率断崖式下滑。为突破这一瓶颈&#…

作者头像 李华
网站建设 2026/4/12 19:02:24

永冲锋,自不凡!永州队与才盛云的华丽逆袭

⚽️ 绿茵场的热血与赛道上的坚守,从来都藏着同一种力量。12月27日,湘超联赛决赛夜,平均年龄不足20岁的永州队1:0力克劲旅常德队,逆袭夺冠。这支赛前不被看好的“学生军”,用拼至最后一秒的韧劲,将“永冲锋…

作者头像 李华
网站建设 2026/4/14 6:53:46

YOLOFuse代币经济模型探讨:激励贡献者机制

YOLOFuse代币经济模型探讨:激励贡献者机制 在智能安防、自动驾驶和夜间巡检等现实场景中,单一可见光摄像头的局限性日益凸显——低光照、烟雾遮挡、热源干扰等问题让传统目标检测模型频频“失明”。而与此同时,红外成像技术凭借其对热辐射的敏…

作者头像 李华
网站建设 2026/4/12 12:33:46

YOLOFuse与智能家居联动:海康威视摄像头对接

YOLOFuse与智能家居联动:海康威视摄像头对接 在夜晚的庭院里,一个模糊的身影悄然靠近围墙。传统监控摄像头因光线不足只能拍到一团黑影,系统无法判断是入侵者还是风吹动的树枝——误报或漏报随时可能发生。而在另一套系统中,红外与…

作者头像 李华