当前位置: 首页 > news >正文

Python克隆单个网页

网上所有代码都无法完全克隆单个网页,不是Css,Js下载不下来就是下载下来也不能正常显示,只能自己写了,记得点赞~

 效果如图:

源码与所需的依赖:

pip install requests
pip install requests beautifulsoup4 lxml 
requests.packages.urllib3.disable_warnings()
pip install urllib3
pip install pyOpenSSL requests[security] urllib3[secure]
import os
import time
import requests
from urllib.parse import urljoin
from bs4 import BeautifulSoup# 配置requests,不验证SSL证书
requests.packages.urllib3.disable_warnings()
session = requests.Session()
session.verify = False  # 不推荐,仅用于测试目的def sanitize_filename(filename):return "".join(i for i in filename if i not in "\/:*?<>|").split('?')[0]def ensure_dir(file_path):if file_path:directory = os.path.dirname(file_path)if directory and not os.path.exists(directory):os.makedirs(directory)def download_resource(url, dest_folder, local_path):try:r = session.get(url, stream=True)r.raise_for_status()ensure_dir(local_path)with open(local_path, 'wb') as f:for chunk in r.iter_content(chunk_size=8192):f.write(chunk)return Trueexcept requests.exceptions.RequestException as e:print(f"Error downloading {url}: {e}")return Falsedef update_resource_links(soup, tag, attribute, base_url, dest_folder, sub_folder):resources = soup.find_all(tag, {attribute: True})for resource in resources:old_url = resource[attribute]new_url = urljoin(base_url, old_url)local_filename = sanitize_filename(new_url.split('/')[-1])local_path = os.path.join(dest_folder, sub_folder, local_filename)full_local_path = os.path.abspath(local_path)if download_resource(new_url, dest_folder, full_local_path):resource[attribute] = os.path.join(sub_folder, local_filename).replace('\\', '/')def save_complete_webpage(url, dest_folder):response = session.get(url)response.raise_for_status()# 尝试从响应头部或内容中获取编码if response.encoding is None:response.encoding = response.apparent_encodingsoup = BeautifulSoup(response.content, 'html.parser', from_encoding=response.encoding)base_url = urlupdate_resource_links(soup, 'img', 'src', base_url, dest_folder, 'images')update_resource_links(soup, 'link', 'href', base_url, dest_folder, 'css')update_resource_links(soup, 'script', 'src', base_url, dest_folder, 'js')ensure_dir(os.path.join(dest_folder, 'index.html'))with open(os.path.join(dest_folder, 'index.html'), 'w', encoding=response.encoding) as file:file.write(soup.prettify())if __name__ == "__main__":timestamp = str(int(time.time()))[-5:]  # 获取当前时间戳的最后5位数字target_url = input("请输入网址:")  # 目标网址destination_folder = f'downloaded_website_{timestamp}'  # 添加时间戳后5位的本地文件夹路径save_complete_webpage(target_url, destination_folder)print(f"已完整,保存到{destination_folder}文件夹中")

 

相关文章:

Python克隆单个网页

网上所有代码都无法完全克隆单个网页&#xff0c;不是Css&#xff0c;Js下载不下来就是下载下来也不能正常显示&#xff0c;只能自己写了&#xff0c;记得点赞~ 效果如图&#xff1a; 源码与所需的依赖&#xff1a; pip install requests pip install requests beautifulsoup4…...

电脑硬盘数据恢复哪个好?值得考虑的 8 个硬盘恢复软件解决方案

借助硬盘恢复软件&#xff0c;任何人都可以在家中恢复丢失的文件&#xff0c;而无需任何特殊技能。事实上&#xff0c;最困难的一步是选择最佳解决方案&#xff0c;因为可用选项的数量可能有点多。幸运的是&#xff0c;这篇文章可以为您提供帮助。 8 款顶级硬盘数据恢复软件解决…...

第二十三节——路由守卫

一、概念 提供的导航守卫主要用来通过跳转或取消的方式守卫导航。有多种机会植入路由导航过程中&#xff1a;全局的, 单个路由独享的, 或者组件级的。简单理解&#xff1a;导航守卫就是路由跳转过程中的一些钩子函数&#xff0c;再直白点路由跳转是一个大的过程&#xff0c;这…...

在gitlab中的使用kaniko打造流水线

文章目录 kaniko工具介绍环境说明系统版本组件版本组件部署参考链接 部署harbor下载解压、创建相关目录配置部署 gitlab集成harbor集成项目ci配置最终结果 kaniko工具介绍 kaniko 是一种从容器或 Kubernetes 集群内的 Dockerfile 构建容器镜像的工具。 kaniko 解决了使用 Doc…...

【C语言 | 预处理】C语言预处理详解(一) —— #define、#under、#if、#else、#elif、#endif、#include、#error

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…...

19、Flink 的Table API 和 SQL 中的自定义函数及示例(2)

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…...

(动手学习深度学习)第7章 残差网络---ResNet

目录 ResNet总结 ResNet代码实现ResNet的梯度计算 ResNet 总结 残差块使得很深的网络更加容易训练 甚至可以训练一千层的网络 残差网络对随后的深层神经网络设计产生了深远影响&#xff0c;无论是卷积类网络还是全连接类网络。 ResNet代码实现 导入相关库 import torch fro…...

4.Pod详解

4.Pod详解 文章目录 4.Pod详解4.1 Pod介绍4.1.1 Pod结构4.1.2 Pod定义4.1.3 在kubernetes中基本所有资源的一级属性都是一样的&#xff0c;主要包含5部分&#xff1a;4.1.4 在上面的属性中&#xff0c;spec是接下来研究的重点&#xff0c;继续看下它的常见子属性: 4.2 Pod配置4…...

OCR技术狂潮:揭秘最新发展现状,引爆未来智能时代

OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;技术自20世纪以来经历了长足的发展&#xff0c;随着计算机视觉、人工智能和深度学习等领域的进步&#xff0c;OCR技术在准确性、速度和适用范围上都取得了显著的进展。以下是OCR技术发展的现…...

【hcie-cloud】【3】华为云Stack规划设计之华为云Stack交付综述【上】

文章目录 前言华为云Stack交付综述交付流程华为云Stack交付流程华为云Stack安装部署流程 交付工具链华为云Stack交付工具链eDesigner - 让解决方案销售更智能eDesigner配置页面 - 基本信息eDesigner配置页面 - 服务及组网配置eDesigner配置页面 - 弹性云服务器/ECSeDesigner配置…...

Spring Ioc 容器启动流程

Spring容器的启动流程 本文基于 Spring 5.3.23 基于XML文件 public void test() {ApplicationContext applicationContext new ClassPathXmlApplicationContext("applicationContext.xml");User user applicationContext.getBean("user", User.class)…...

【714. 买卖股票的最佳时机含手续费】

目录 一、题目解析二、算法原理三、代码实现 一、题目解析 二、算法原理 三、代码实现 class Solution { public:int maxProfit(vector<int>& prices, int fee) {int nprices.size();vector<vector<int>> dp(n,vector<int>(2));dp[0][0]-prices[0…...

JS前端实现身份证号码合法性校验(校验码校验)

在做项目过程中针对自然人数据提交到后端前一般是要进行身份证的合法性校验&#xff0c;当身份证号输入错误以便给于用户友好的提示(也可以根据身份证号同时校验表单中性别和出生日期等)&#xff0c;验证主要是防止无效数据入库。本文在前端使用JavaScript实现15/18位身份证的合…...

操作系统 day09(线程)

线程 为什么引入线程 在没引入进程之前&#xff0c;系统中的各个程序只能串行的执行&#xff0c;比如&#xff1a;只能先听歌&#xff0c;再聊QQ。引入进程之后&#xff0c;各个程序可以并发执行&#xff0c;比如&#xff1a;一边听歌&#xff0c;一边聊QQ。但是现在QQ可以一…...

单通道低压 H 桥电机驱动芯片AT9110H 兼容L9110 马达驱动芯片

H桥直流电机驱动电路是一种用于控制直流电机运转的电路&#xff0c;其主要特点是可以实现正反转控制&#xff0c;控制电机转速和方向&#xff0c;同时也具有过流保护功能。 H桥电路由四个功率晶体管和一些辅助电路组成&#xff0c;其中两个晶体管用于控制电机正转&#xff0c;…...

18. 深度学习 - 从零理解神经网络

文章目录 本文目标预测趋势与关系波士顿房价预测 Hi, 你好。我是茶桁。 我们终于又开启新的篇章了&#xff0c;从今天这节课开始&#xff0c;我们会花几节课来理解一下深度学习的相关知识&#xff0c;了解神经网络&#xff0c;多层神经网络相关知识。并且&#xff0c;我们会尝…...

Pycharm加载项目时异常,看不到自己的项目文件

最近看到一个朋友问&#xff0c;他把项目导入pycharm为什么项目里的包不在项目里显示&#xff0c;只在projects file里显示&#xff1f;问题截图如下&#xff1a; Project里看不到自己的项目文件 只能在Project Files里看到自己的项目文件 问题解答 我也是偶然发现的这个方案…...

目标检测YOLO实战应用案例100讲-基于无人机的轻量化目标检测系统设计(续)

目录 3.2 深度神经网络处理器设计 3.2.1 卷积神经网络处理器设计思路...

大文件传输小知识 | UDP和TCP哪个传输速度快?

在网络世界中&#xff0c;好像有两位“传输巨头”常常被提起&#xff1a;UDP和TCP。它们分别代表着用户数据报协议和传输控制协议。那么它们是什么&#xff1f;它们有什么区别&#xff1f;它们在传输大文件时的速度又如何&#xff1f;本文将深度解析这些问题&#xff0c;帮助企…...

【tgcalls】Instance接口的实例类的创建

tg 里有多个版本,因此设计了版本管理的map,每次可以选择一个版本进行实例创建这样,每个客户端就可以定制开发了。tg使用了c++20创建是要传递一个描述者,里面是上下文信息 G:\CDN\P2P-DEV\tdesktop-offical\Telegram\ThirdParty\tgcalls\tgcalls\Instance.cpp可以看到竟然是…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...