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

【python数据处理】保存网页

直觉上处理网页信息,很多人会先将网页保存成HTML,然后做文本分析。但这样做是不够的,因为网页可能内嵌图片,这些图片在HTML里就是一处链接,离线处理时无法还原,相当于丢失了图片信息。更好的做法是将整个网页一次性保存下来。

路径一:将网页保存成mhtml,然后保存成图片。没有现成的工具可以做到这点,mhtml可以通过直接将后缀改成doc以doc的方式打开。然后通过工具将doc转成图片。

路径二:将网页保存成mhtml,然后使用chromedriver保存成pdf,然后pdf再转图片。

路径三:使用chromedriver直接将网页保存成pdf,然后pdf再转图片。

import os
import csv
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
import base64def get_url_list(csv_path):content_list = []with open(csv_path, "r", encoding="gbk") as fin:csv_reader = csv.reader(fin)for line in csv_reader:content_list.append(line)title_list, url_list = list(zip(*content_list))return title_list, url_listif __name__ == "__main__":url_file_path = "title_url.csv"driver_location = 'chromedriver.exe的绝对路径'service = Service(driver_location)# 创建Chrome选项options = Options()# 无头模式,无界面options.add_argument("--headless")options.add_argument("--disable-gpu")driver = webdriver.Chrome(options, service)# 设置 PDF 选项pdf_options = {# 'paperWidth': 33.1,  # 纸张宽度,单位是英寸# 'paperHeight': 46.8,  # 纸张高度,单位是英寸'printBackground': True,  # 是否打印背景'landscape': False  # 是否横向打印}title_list, url_list = get_url_list(url_file_path)for i, url_path in enumerate(url_list):driver.get(url_path) # 打开网页# 使用 Chrome DevTools 协议保存为 PDFpdf_data = driver.execute_cdp_cmd('Page.printToPDF', pdf_options)# 解码并保存 PDF 文件pdf_content = base64.b64decode(pdf_data['data'])cur_title = title_list[i]cur_title = cur_title.replace("/", "_").replace("\\", "_")output_path = "pdf_output/" + cur_title + ".pdf"print(output_path)try:with open(output_path, 'wb') as file:file.write(pdf_content)except:print("fail", output_path)# 关闭 WebDriverdriver.quit()

相关文章:

【python数据处理】保存网页

直觉上处理网页信息,很多人会先将网页保存成HTML,然后做文本分析。但这样做是不够的,因为网页可能内嵌图片,这些图片在HTML里就是一处链接,离线处理时无法还原,相当于丢失了图片信息。更好的做法是将整个网…...

智能体趋势:未来科技的核心驱动力

随着人工智能(AI)技术的不断发展,**智能体(intelligent agents)**逐渐成为当今科技发展的重要趋势。这些智能体不仅仅是软件,它们正在改变我们生活和工作的方式,成为推动科技和社会变革的核心力…...

学习笔记 韩顺平 零基础30天学会Java(2024.9.16)

P563 自定义泛型方法 当调用方法时,要传入参数,因为当传入参数时,编译器就可以确定泛型代表的类型 泛型方法和方法使用了泛型是不一样的 泛型方法可以使用类声明的泛型,也可以使用自己的泛型 P564 泛型方法练习 P565 泛型的继承和…...

python selenium网页操作

一、安装依赖 pip install -U seleniumselenium1.py: from selenium import webdriver from selenium.webdriver.common.by import Bydriver webdriver.Chrome() driver.get("https://www.selenium.dev/selenium/web/web-form.html") title driver.ti…...

pytorch使用技巧

pytorch使用技巧 1. 指定GPU编号 设置当前使用的GPU设备仅为0号设备,设备名称为 /gpu:0os.environ["CUDA_VISIBLE_DEVICES"] "0" 设置当前使用的GPU设备为0, 1号两个设备,名称依次为 /gpu:0、/gpu:1: os.environ[&quo…...

从用户数据到区块链:Facebook如何利用去中心化技术

在数字化时代,用户数据的管理和保护已成为科技公司面临的重大挑战。作为全球最大的社交网络平台之一,Facebook不仅在用户数据的处理上积累了丰富的经验,也在探索如何利用去中心化技术,如区块链,来改进其数据管理和用户…...

Elasticsearch之bool查询

bool 查询是 Elasticsearch 中最常用的复合查询类型,允许将多个查询组合在一起。它通过逻辑操作符(如 must、should、must_not 和 filter)来构建复杂的查询条件,从而满足多条件匹配、逻辑与(AND)、或&#…...

IntelliJ IDEA 创建 Java 项目指南

IntelliJ IDEA 是一款功能强大的集成开发环境(IDE),广泛用于 Java 开发。本文将介绍如何在 IntelliJ IDEA 中创建一个新的 Java 项目,包括环境的设置和基本配置。更多问题,请查阅 一、安装 IntelliJ IDEA 1. 下载 In…...

一起学Java(13)-[日志篇]教你分析SLF4J和Log4j2源码,掌握SLF4J与Log4j2桥接集成原理

研究完SLF4J和Logback这种无缝集成的方式(一起学Java(12)-[日志篇]教你分析SLF4J源码,掌握SLF4J如何与Logback无缝集成的原理),继续研究Log4j2和SLF4J这种需要桥接集成的方式。 一、桥接包如何与SLF4J集成 我们已经知道SLF4J利用ServiceLoader机制&…...

深入Redis:核心的缓存

Redis最主要的用途,主要有三个方面:存储数据、缓存、消息队列。 其中,缓存是Redis最常用的场景。Redis使用内存作为硬盘的缓存。把用户集中访问的20%数据放到缓存中去,可以应对80%的请求。 数据库是非常重要的组件,但…...

集群聊天服务器项目【C++】项目介绍和环境搭建

前言:学习一个基于C集群聊天服务器的项目,记录学习的内容和学习的过程。 1.项目介绍 在 Linux 环境下基于 muduo 开发的集群聊天服务器。实现新用户注册、用户登录、添加好友、添加群组、好友通信、群组聊天、保持离线消息等功能。 2.技术栈 Json序列…...

c++ #include <memory> 智能指针介绍

#include <memory> 是 C 标准库中的头文件&#xff0c;用于支持智能指针的功能。智能指针是现代 C 的一种资源管理工具&#xff0c;用于自动管理动态分配的内存&#xff0c;从而减少内存泄漏和悬挂指针等问题的发生。它提供了多种类型的智能指针&#xff0c;包括 std::un…...

32.递归、搜索、回溯之floodfill算法

0.简介 1.图像渲染 . - 力扣&#xff08;LeetCode&#xff09; 题目解析 算法原理 代码 class Solution {int[] dx { 0, 0, 1, -1 };int[] dy { 1, -1, 0, 0 };int m, n;int prev;public int[][] floodFill(int[][] image, int sr, int sc, int color) {if (image[sr][sc]…...

Vue3.5+ 响应式 Props 解构

你好同学&#xff0c;我是沐爸&#xff0c;欢迎点赞、收藏、评论和关注。 在 Vue 3.5 中&#xff0c;响应式 Props 解构已经稳定并默认启用。这意味着在 <script setup> 中从 defineProps 调用解构的变量现在是响应式的。这一改进大大简化了声明带有默认值的 props 的方…...

k8s中的认证授权

目录 一、kubernetes API 访问控制 1.1 UserAccount与ServiceAccount 1.1.1 ServiceAccount 1.1.2 ServiceAccount示例 二、认证(在k8s中建立认证用户) 2.1 创建UserAccount 2.2 RBAC&#xff08;Role Based Access Control&#xff09; 2.2.1 基于角色访问控制授权&…...

Leetcode 3291. Minimum Number of Valid Strings to Form Target I

Leetcode 3291. Minimum Number of Valid Strings to Form Target I 1. 解题思路2. 代码实现 题目链接&#xff1a;3291. Minimum Number of Valid Strings to Form Target I 1. 解题思路 这一题第一反应就是用一个字典树动态规划的方式&#xff0c;倒是也搞定了&#xff0c…...

PostgreSQL的查看主从同步状态

PostgreSQL的查看主从同步状态 PostgreSQL 提供了一些系统视图和函数&#xff0c;查看和监控主从同步的状态。 1 在主节点上查看同步状态 pg_stat_replication 视图 在主节点上&#xff0c;可以通过查询 pg_stat_replication 视图来查看复制的详细状态信息&#xff0c;包括…...

Java多态性的理解

方法的覆盖 子类的方法重写了父类的方法&#xff0c;相当于对原来的方法进行了增强&#xff0c;接口就是这样的思想。 属性的隔离&#xff08;Java中什么情况下都不会属性覆盖&#xff0c;python可能会覆盖&#xff09; public class Main {public static void main(String[…...

安全工具 | 使用Burp Suite的10个小tips

Burp Suite 应用程序中有用功能的集合 img Burp Suite 是一款出色的分析工具&#xff0c;用于测试 Web 应用程序和系统的安全漏洞。它有很多很棒的功能可以在渗透测试中使用。您使用它的次数越多&#xff0c;您就越发现它的便利功能。 本文内容是我在测试期间学到并经常的主要…...

企业项目中字符串工具类

此工具类暂时包含如下功能&#xff1a; isEmpty()判断字符串是否为空subSpecifiedString()判断字符串是否超出指定长度&#xff0c;超出则截取到指定长度yearMonthToDate()将年月的字符串转成年月日格式 yearMonthToDateTime()将年月的字符串转成年月日时分秒格式 package co…...

【DeepSeek-R1代码相似度引擎解密】:3层语义比对机制、Token归一化偏差修正与Jaccard阈值黄金分割点

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;DeepSeek代码重复检测 DeepSeek-R1 模型在训练过程中引入了严格的代码去重机制&#xff0c;其核心目标是消除训练语料中语义等价或高度相似的代码片段&#xff0c;从而提升模型对真实编程模式的学习能力与泛化…...

DeepSeek-R1补全能力封测倒计时(仅剩72小时开放API灰度权限):这份内部测试SOP已被3家头部科技公司紧急采购

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;DeepSeek-R1代码补全能力封测全景概览 DeepSeek-R1 是深度求索&#xff08;DeepSeek&#xff09;推出的高性能开源推理模型&#xff0c;在代码补全场景中展现出显著的上下文理解力与多语言泛化能力。本…...

二十六.签名与脚本(1)--脚本介绍

1.区块链脚本介绍在之前的章节中&#xff0c;我们了解了签名与验证相关&#xff0c;但是btc的交易数据&#xff0c;签名和验证&#xff0c;不是单纯的&#xff0c;还有脚本深度参与其中。我们从开始来&#xff1a;bool SendMoney(CScript scriptPubKey, int64 nValue, CWalletT…...

危急时刻的六条基本安全提示

人机协作&#xff0c;AI模型&#xff1a;Deepseek 仅供参考 危急时刻的六条基本安全提示 以下内容仅为通用性安全建议&#xff0c;供在紧急情况下保持冷静、保护自身安全时参考。所有建议均基于常理和公共安全常识&#xff0c;不包含任何具体操作细节或可能被不当使用的信息…...

超低功耗电池电压监控电路设计:从LM324到LPV324的硬件方案优化

1. 项目概述与核心需求解析在捣鼓各种电池供电的电子设备时&#xff0c;无论是自己做的无线传感器节点、便携式小工具&#xff0c;还是给孩子改装的玩具&#xff0c;有一个问题总是绕不开&#xff1a;你怎么知道电池快没电了&#xff1f;总不能每次都等到设备彻底罢工&#xff…...

从《吃豆人》到开放世界:聊聊Unity Navigation里Agent Radius和Cost的那些‘潜规则’

从《吃豆人》到开放世界&#xff1a;Unity Navigation中Agent Radius与Cost的隐藏逻辑1980年诞生的《吃豆人》用简单的迷宫路径定义了早期游戏AI的移动规则——幽灵们沿着固定路线巡逻&#xff0c;遇到转角时随机选择方向。这种设计在当时堪称革命性&#xff0c;但以今天的标准…...

Win11Debloat:Windows系统精简与隐私保护的专业解决方案

Win11Debloat&#xff1a;Windows系统精简与隐私保护的专业解决方案 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and …...

UnityExplorer:如何在游戏运行时实时调试和修改Unity项目

UnityExplorer&#xff1a;如何在游戏运行时实时调试和修改Unity项目 【免费下载链接】UnityExplorer An in-game UI for exploring, debugging and modifying IL2CPP and Mono Unity games. 项目地址: https://gitcode.com/gh_mirrors/un/UnityExplorer UnityExplorer是…...

C语言有符号和无符号在内存中的存储方式区别小结

在 C 语言中&#xff0c;​有符号类型&#xff08;如 signed char、signed int&#xff09;和无符号类型&#xff08;如 unsigned char、unsigned int&#xff09;在内存中的存储方式本质上没有区别——它们都是以二进制位的形式存储数值的。两者的核心差异体现在对二进制位的解…...

8大网盘文件直链一键获取:LinkSwift让你的下载速度突破限速瓶颈

8大网盘文件直链一键获取&#xff1a;LinkSwift让你的下载速度突破限速瓶颈 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云…...