当前位置: 首页 > 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可以看到竟然是…...

Python实战:用NetworkX可视化TSP问题,手把手教你实现最邻近与插入算法

Python实战&#xff1a;用NetworkX可视化TSP问题&#xff0c;手把手教你实现最邻近与插入算法 当你在规划一次跨越多个城市的旅行路线时&#xff0c;如何找到最短的路径&#xff1f;这就是经典的旅行商问题&#xff08;TSP&#xff09;。作为组合优化领域的著名难题&#xff0c…...

别再只用@input了!UniApp搜索框实战:实时联想与回车确认的完整交互方案

UniApp搜索框交互进阶&#xff1a;实时联想与回车确认的工程实践 在移动应用开发中&#xff0c;搜索功能看似简单&#xff0c;实则暗藏玄机。一个优秀的搜索交互需要平衡实时响应与性能消耗&#xff0c;兼顾用户体验与系统资源。本文将带你深入UniApp搜索框的进阶实践&#xff…...

别再只用来抓密码了!Mimikatz的Token操纵与Chrome凭证提取实战详解

从密码提取到权限操控&#xff1a;Mimikatz高阶攻防技术深度解析 当大多数人提起Mimikatz时&#xff0c;第一反应往往是"那个抓密码的工具"。这种刻板印象严重低估了这款传奇安全工具的战术价值。作为Windows安全领域的瑞士军刀&#xff0c;Mimikatz在权限操控方面的…...

避坑指南:为什么ESP32的One-Wire驱动读不了AM2302?手把手教你用MicroPython中断搞定它

ESP32与AM2302的协议兼容性困境&#xff1a;用MicroPython中断方案破解温湿度读取难题 当你在ESP32上尝试用MicroPython的One-Wire驱动读取AM2302温湿度传感器时&#xff0c;大概率会遇到数据读取失败的情况。这不是代码写错了&#xff0c;而是两种协议之间存在微妙的时序差异。…...

3步精通Godot PCK解包:游戏资源提取的完整实战方案

3步精通Godot PCK解包&#xff1a;游戏资源提取的完整实战方案 【免费下载链接】godot-unpacker godot .pck unpacker 项目地址: https://gitcode.com/gh_mirrors/go/godot-unpacker 在游戏开发与逆向工程领域&#xff0c;Godot引擎的PCK资源包常成为技术人员的探索障碍…...

使用 TensorFlow 2.0 构建你的第一个模型

TensorFlow 2.0 是谷歌推出的强大深度学习框架&#xff0c;以其易用性和高效性成为开发者的首选。无论你是机器学习新手还是经验丰富的工程师&#xff0c;TensorFlow 2.0 都能帮助你快速构建和训练模型。本文将带你一步步完成第一个模型的构建&#xff0c;从数据准备到模型训练…...

BPE分词器原理与在Llama模型中的实践应用

1. 理解BPE分词器及其在Llama模型中的应用在自然语言处理领域&#xff0c;分词器是将原始文本转换为模型可处理形式的第一道关卡。对于像Llama这样的大型语言模型&#xff0c;Byte-Pair Encoding&#xff08;BPE&#xff09;已成为事实上的标准分词算法。BPE之所以受到青睐&…...

Neofetch配置文件深度解析:从英文到全中文,再到只显示你关心的系统指标

Neofetch配置文件深度解析&#xff1a;从英文到全中文&#xff0c;再到只显示你关心的系统指标 在终端里敲下neofetch命令后&#xff0c;系统信息以ASCII艺术形式优雅呈现的场景&#xff0c;已经成为技术爱好者们的某种仪式感。但当你第20次看到相同的显卡型号和内存占用率时&a…...

SCons构建MDK工程翻车实录:从‘No module named building’到完美运行的踩坑全指南

SCons构建MDK工程实战&#xff1a;从报错排查到工程定制的完整指南 第一次接触SCons构建MDK工程时&#xff0c;那种从满屏红色报错到最终看到"Build Complete"的成就感&#xff0c;至今记忆犹新。作为替代传统IDE手动配置的自动化方案&#xff0c;SCons确实能显著提升…...

别急着买群晖!用你吃灰的旧笔记本,30分钟搞定Windows家庭文件共享中心

闲置笔记本变身家庭数据中枢&#xff1a;零成本搭建Windows共享系统的完整指南 在智能设备普及的今天&#xff0c;每个家庭都面临着数据存储与共享的难题——手机照片无处安放、电影资源无法多设备共享、重要文档需要反复传输。当市面上的NAS设备动辄数千元时&#xff0c;很多人…...