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

【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 base64

def 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_list

if __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 协议保存为 PDF
        pdf_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)

    # 关闭 WebDriver
    driver.quit()


http://www.kler.cn/news/307881.html

相关文章:

  • C/C++实现植物大战僵尸(PVZ)(打地鼠版)
  • Transformer-Adaboost多输入单输出回归预测神经网络【MATLAB】
  • Alinx MPSoC驱动开发第11章异步IO实验按下按键报IO Possibile后结束进程
  • 【运维】好用的线上项目运维命令
  • ASPICE培训:打造卓越的汽车软件开发能力
  • 比传统机器学习更先进的深度学习神经网络的二分类建模全流程教程
  • 【网络原理】❤️Tcp 常用机制❤️ —— 延时应答,捎带应答, 面向字节流, 异常情况处理。保姆式详解 , 建议收藏 !!!
  • Kafka支持SSL/TLS协议技术深度解析
  • Android13 下载apk并安装apk
  • 跳出大厂圈子——普通程序员如何开启逆袭之路
  • mac上什么压缩软件没有广告,苹果电脑解压软件BetterZip有广告吗
  • 深入理解MATLAB中的事件处理机制
  • ROS组合导航笔记:融合传感器数据
  • 嵌入式数据库sqlite和rocksdb的介绍以及对比
  • 分治算法归并排序
  • CSP-J/S赛前知识点大全2:初赛纯靠记忆的知识点
  • Docker高级管理之compose容器编排与私有仓库的部署
  • FPGA实现串口升级及MultiBoot(四)MultiBoot简介
  • [苍穹外卖]-12Apache POI入门与实战
  • 滚雪球学SpringCloud[2.1]:服务注册中心Eureka
  • robomimic基础教程(三)——自带算法
  • 【Linux】ICMP
  • 【开端】docker基线漏洞修复
  • React-Hooks-Form 集成 Zod 校验库
  • go get -u @latest没有更新依赖模块
  • 如何通过深度学习实践来理解深度学习的核心概念
  • Ubuntu 24.04中安装virtualenv
  • QT + WebAssembly + Vue环境搭建
  • JS面试真题 part4
  • 【Spring框架精讲】进阶指南:企业级Java应用的核心框架(Spring5)