整站下载保存为mhtml

整站下载保存为mhtml

  • 代码

MHTML格式具有独特的优点,它可以完整保留原始网页的所有布局元素以及嵌入图片,无需外部依赖即可呈现原始网页内容,增强了可读性和便捷性。下文将展示如何运用自动化技术,从一个网站的首页出发,采用递归爬取的方式遍历整个站点,并将抓取到的各个页面悉数保存为MHTML格式,同时按照URL的层级结构,将这些页面对应地存储到相应的目录层级中。

代码

# coding: utf-8
import requests
import re
from bs4 import BeautifulSoup
import codecs
import json
import time
import datetime
import os
import sys
from tqdm import tqdm
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import Bydef replace_url(name):for i in ['S:', '-', '<', '>', '/', '\\', '|', ':', '*', '?', ' ','·','"','”','\'','”']:name = name.replace(i, '')return namedef replace_dir(name):for i in ['<', '>', '|', ':', '*','·','"','”','”','“',' ',".."]:name = name.replace(i, '')return namedef get_dirname(path):if os.path.dirname(path) == "":return os.path.basename(path)return os.path.dirname(path)    def get_href_recursive(loginreqsession,Todo,Finished,Files,black_list):    '''递归获取所有的链接,采用set去重'''if len(Todo)==0:returnfor url in list(Todo):if url in Finished or url in black_list:Todo.remove(url)continuepage_html_text = loginreqsession.get(url).content.decode("utf-8")soup = BeautifulSoup(page_html_text, 'html.parser')hrefs=soup.find_all('a')for s in hrefs:            href=s['href']excludes=["http","#",".","javascript",u"下载"]skip=Falsefor prefix in excludes:if href.startswith(prefix):skip=Truebreakif skip:continueprint(href)Todo.add("{}{}".format(url,href))Finished.add(url)Todo.remove(url)get_href_recursive(loginreqsession,Todo,Finished,Files,black_list)def create_href_list(home_page):loginreqsession = requests.session()Finished=set()Todo=set()Files=[]black_list=set()Todo.add(home_page)loginreqsession = requests.session()    get_href_recursive(loginreqsession,Todo,Finished,Files,black_list)with open("list.txt","w") as f:for link in Finished:f.write("{}\n".format(link))def save_page_as_mhtml(home_page,driver, wait, url):pagename=url.replace(home_page,"home").strip()[:-1]output_path='{}.mhtml'.format(pagename)output_path=os.path.join(replace_dir(os.path.dirname(output_path)).strip(),replace_url(os.path.basename(output_path)).strip())base_dir = get_dirname(output_path)if not os.path.exists(base_dir):os.makedirs(base_dir)if os.path.exists(output_path):return True#等待页面加载完成       driver.set_page_load_timeout(120)driver.set_script_timeout(120)try:driver.get(url)except:print("timeout:",url)       return True   time.sleep(10) #非必要res = driver.execute_cdp_cmd('Page.captureSnapshot', {})try:with open(output_path, 'w', newline='') as f:f.write(res['data'])except:return Truereturn Truedef save_pages(home_page):options = webdriver.ChromeOptions()driver = webdriver.Chrome()wait = WebDriverWait(driver, 10)with open("list.txt","r") as f:for link in tqdm(f.readlines()):save_page_as_mhtml(home_page,driver, wait,link)def main():home_page="http://192.168.1.100"                create_href_list(home_page)save_pages(home_page)if __name__ == "__main__":main()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/731759.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot 部署在Windows

1、Spring Boot项目打成jar包。利用maven插件&#xff08;多模块项目只需在服务模块添加插件&#xff09; <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId>…

服务器租用和托管的区别

目前对于服务器要求相对高的企业会希望使用独立服务器来运行自己的网站&#xff0c;而在选择独立服务器业务事&#xff0c;是使用服务器托管还是服务器租用这两种方法时&#xff0c;许多刚进入网络或者传统行业的从业者&#xff0c;都不太了解什么是服务器&#xff0c;现在我来…

数据推送解决方案调研

需求 文档编辑类型的需求&#xff0c;左侧是菜单栏&#xff0c;右侧是内容块&#xff0c;现在的需求时&#xff0c;如果多人同时编辑这个方案&#xff0c;当添加章节/调整章节顺序/删除章节时&#xff0c;其他用户能够及时感知到。 解决方案调研 前端轮询 最简单的方案&…

Go语言:一门简洁高效的编程语言

Go语言简介 Go语言&#xff0c;又称Golang&#xff0c;是一种由Google开发的静态编译型编程语言。Go语言语法简洁&#xff0c;易于学习&#xff0c;同时具有C语言的运行效率。Go语言被广泛应用于Web开发、云计算、系统编程等领域。 Go语言的特点 Go语言具有以下特点&#xf…

系统安全保证措施-word

【系统安全保证措施-各支撑材料直接套用】 一、 身份鉴别 二、 访问控制 三、 通信完整性、保密性 四、 抗抵赖 五、 数据完整性 六、 数据保密性 七、 应用安全支撑系统设计 软件全套资料下载进主页。

JProfiler详解 JVM性能监测内存泄露分析工具

JProfiler详解 JProfiler简介主要功能特点使用场景注意事项使用案例使用步骤Could not verify ssh-ed25519 host key with fingerprint 问题解决内存泄露分析 JProfiler简介 JProfiler是一款业界领先的Java性能分析工具&#xff0c;由ej-technologies公司开发&#xff0c;专门…

STM32自学☞WDG(看门狗)及其案例

一、WDG简介 由于看门狗的代码很少所以就直接在main主函数中写了&#xff0c;没单独建文件 二、独立看门狗 涉及的按键可参考之前的key.c和key.h文件 独立看门狗配置流程&#xff1a; 1.开启时钟&#xff08;LSI&#xff09; 2.解除IWDG_PR和IWDG_RLR的写保护 3.写入预分频和重…

【C++】什么是类与对象?

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:C ⚙️操作环境:Visual Studio 2022 目录 面向对象概述 封装 继承 多态 类 类是什么? C中类的引入 C中类的定义 类的两种定义方式: 1.声明和定义全部放在类体中 2.类声明与成员函数定义分别放在不同的工程文件中…

Qt开发QHostInfo主机地址查询组件

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍如何运用QHostInfo组件实现对主机地址查询功能…

三井住友保险中国区信息技术部负责人陈婧,将出席“ISIG-RPA超级自动化产业发展峰会”

3月16日&#xff0c;第四届「ISIG中国产业智能大会」将在上海中庚聚龙酒店拉开序幕。本届大会由苏州市金融科技协会指导&#xff0c;企智未来科技&#xff08;RPA中国、AIGC开放社区、LowCode低码时代&#xff09;主办。大会旨在聚合每一位产业成员的力量&#xff0c;深入探索R…

用一个 Python 脚本实现依次运行其他多个带 argparse 命令行参数的 .py 文件

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 问题描述&#xff1a;在 Windows 环境中&#xff0c;您希望通过一个 Python 脚本来实现特定的自动化任务&#xff0c;该任务需要依次运行其他多个带 argparse 命令行参数的 .py 文件。您希望找到一种简…

手写分布式配置中心(六)整合springboot(自动刷新)

对于springboot配置自动刷新&#xff0c;原理也很简单&#xff0c;就是在启动过程中用一个BeanPostProcessor去收集需要自动刷新的字段&#xff0c;然后在springboot启动后开启轮询任务即可。 不过需要对之前的代码再次做修改&#xff0c;因为springboot的配置注入value("…

Gitea 安装和配置

Gitea 安装和配置: http://coffeelatte.vip.cpolar.top/post/software/applications/gitea/gitea_安装和配置/ 1.简介 Gitea 是一个类似于 GitHub 的功能强大的代码托管平台&#xff0c;使用 Go 语言开发&#xff0c;只需要一个可执行程序文件即可部署&#xff0c;非常简单易…

C++命名空间详解

目录 C的由来&#xff1a; C语言的命名缺陷&#xff1a; 什么是命名空间&#xff1f; 命名空间的访问方式&#xff1a; 1、指定访问 2、展开命名空间&#xff08;慎用&#xff09; 相关知识&#xff1a; C的由来&#xff1a; C原来本质上是在C的基础上补充的语法&#x…

ARM单片机中程序在ROM空间和RAM空间的分布(分散加载文件,Scatter-Loading Description File)

对于 K e i l u V i s i o n I D E Keil\quad uVision\quad IDE KeiluVisionIDE&#xff0c;程序编译好之后&#xff0c;代码的下载位置&#xff08; R O M ROM ROM空间&#xff09;以及代码运行的时候使用的 R A M RAM RAM空间&#xff08; R A M RAM RAM空间&#xff09;默认…

下载一些ROS的包的方式

ROS Index 我们可以去ROS Index网站下载一些我们需要的包。打开浏览器在网址框输入index.ros.org。或者点击此处链接ROS Index 在这个网站中我们可以浏览并找到我们需要的包&#xff0c;也可以下载它的源代码或者仅安装到我们的系统中来使用。&#xff08;安装过程在终端中进行…

植物病虫害:YOLO水稻虫害识别数据集(6类,五千余张图像,标注完整)

YOLO水稻虫害识别数据集&#xff0c;包含褐飞虱&#xff0c;绿叶蝉&#xff0c;正常叶片&#xff0c;稻虫&#xff0c;二化螟&#xff0c;蝇蛆6个类别&#xff0c;共五千余张图像&#xff0c;yolo标注完整。 适用于CV项目&#xff0c;毕设&#xff0c;科研&#xff0c;实验等 …

零、自然语言处理开篇

目录 0、NLP任务的基础——符号向量化 0.0 词袋模型 0.1 查表/One-hot编码 0.2 词嵌入模型/预训练模型 0.2.0 Word2Vec &#xff08;0&#xff09;CBOW &#xff08;1&#xff09;Skip-gram 0.2.1 GloVe 0.2.2 WordPiece 0.2.3 BERT 0.2.4 ERNIE NLP自然语言处理&am…

Java 的 System 类常用方法介绍

Java 中的 System 类是一个final类&#xff0c;它提供了与系统相关的属性和方法。它是一个内置的类&#xff0c;可以直接使用&#xff0c;不需要实例化。System 类提供了标准输入、标准输出和错误输出流&#xff0c;以及对外部定义的属性和系统环境的访问。下面是 System 类的一…

python web开发-基于Flask+LeanCloud小店定时任务

在Python Web开发中&#xff0c;使用Flask框架进行Web应用的构建是非常常见的选择。同时&#xff0c;为了处理数据存储和提供云服务&#xff0c;LeanCloud作为一个BaaS&#xff08;Backend as a Service&#xff09;提供商&#xff0c;为开发者提供了丰富的功能。 要实现一个基…