当前位置: 首页 > 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()

http://www.lryc.cn/news/439891.html

相关文章:

  • 智能体趋势:未来科技的核心驱动力
  • 学习笔记 韩顺平 零基础30天学会Java(2024.9.16)
  • python selenium网页操作
  • pytorch使用技巧
  • 从用户数据到区块链:Facebook如何利用去中心化技术
  • Elasticsearch之bool查询
  • IntelliJ IDEA 创建 Java 项目指南
  • 一起学Java(13)-[日志篇]教你分析SLF4J和Log4j2源码,掌握SLF4J与Log4j2桥接集成原理
  • 深入Redis:核心的缓存
  • 集群聊天服务器项目【C++】项目介绍和环境搭建
  • c++ #include <memory> 智能指针介绍
  • 32.递归、搜索、回溯之floodfill算法
  • Vue3.5+ 响应式 Props 解构
  • k8s中的认证授权
  • Leetcode 3291. Minimum Number of Valid Strings to Form Target I
  • PostgreSQL的查看主从同步状态
  • Java多态性的理解
  • 安全工具 | 使用Burp Suite的10个小tips
  • 企业项目中字符串工具类
  • 下载github patch到本地
  • C++基础部分代码
  • neo4j(spring) 使用示例
  • 链接升级:Element UI <el-link> 的应用
  • 简单题26 - 删除有序数组中的重复项(Java)20240917
  • DFS:深搜+回溯+剪枝实战解决OJ问题
  • 命令语境中的“可以”的字词含义分析
  • 直播相关03-录制麦克风声音, ffmpeg 命名,使用命令行完成录音
  • VUE3中ref与reactive
  • 高职院校人工智能技术和无人机技术实训室建设方案
  • x-cmd pkg | shtris: 在终端体验经典的俄罗斯方块游戏