爬取网站内容转为markdown 和 html(通常模式)

news/2025/2/21 6:17:04/

我们遇到一些自己喜欢内容,想保存下来,手动复制粘贴很麻烦,我们使用 html" title=python>python 来爬取这些内容。

一、代码

downlod.py

html" title=python>python">import os
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin# 目标网页(可以更改)
url = "https://www.baidu.com"# 指定保存的文件夹和 Markdown 文件名
save_folder = "web_md"
os.makedirs(save_folder, exist_ok=True)
md_filename = os.path.join(save_folder, "page.md")
images_folder = os.path.join(save_folder, "images")
os.makedirs(images_folder, exist_ok=True)# 获取网页内容
response = requests.get(url)
response.encoding = response.apparent_encoding
soup = BeautifulSoup(response.text, "html.parser")# 打开 Markdown 文件
with open(md_filename, "w", encoding="utf-8") as md_file:md_file.write(f"# {soup.title.string.strip()}\n\n")for element in soup.body.find_all(["p", "a", "code", "img", "h1", "h2", "h3", "h4", "h5", "h6", "pre"], recursive=True):if element.name == "h1":md_file.write(f"\n# {element.get_text(strip=True)}\n\n")elif element.name == "h2":md_file.write(f"\n## {element.get_text(strip=True)}\n\n")elif element.name == "h3":md_file.write(f"\n### {element.get_text(strip=True)}\n\n")elif element.name == "h4":md_file.write(f"\n#### {element.get_text(strip=True)}\n\n")elif element.name == "p":md_file.write(f"{element.get_text(strip=True)}\n\n")elif element.name == "a":link_text = element.get_text(strip=True)href = urljoin(url, element["href"])md_file.write(f"[{link_text}]({href})\n\n")elif element.name == "code":md_file.write(f"```\n{element.get_text(strip=True)}\n```\n\n")elif element.name == "pre":md_file.write(f"```\n{element.get_text()}\n```\n\n")elif element.name == "img":img_url = urljoin(url, element["src"])img_name = os.path.basename(img_url).split("?")[0]img_path = os.path.join(images_folder, img_name)try:img_data = requests.get(img_url).contentwith open(img_path, "wb") as img_file:img_file.write(img_data)md_file.write(f"![{img_name}](images/{img_name})\n\n")except Exception as e:print(f"下载 {img_url} 失败: {e}")print(f"Markdown 文件已保存至 {md_filename}")

二、安装环境

  1. 安装 html" title=python>python
  2. 管理员运行 cmd,最好挂梯子
pip install requests beautifulsoup4

在这里插入图片描述
3. 在 downlod.py 同级目录下运行cmd

html" title=python>python download.py

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、vscode + markdown all in one

  1. 安装 vscode
  2. vscode 的扩展安装 markdown all in one
    在这里插入图片描述
  3. vscode 打开下载的 md 文件
  4. 点击右上角的 预览 按钮,即可预览转换后的 md 文件
    在这里插入图片描述
  5. ctrl + shift + p,打开命令模式
  6. 输入 markdown ,使用这个命令,可以将md转为 html 格式
    在这里插入图片描述
    在这里插入图片描述

http://www.ppmy.cn/news/1573366.html

相关文章

加强地面塌陷隐患防治,构筑城市地质安全防线

随着我国城市现代化建设进程的加快,城市基础建设和房地产开发呈现出高速发展的态势。然而,在这一繁荣景象的背后,城市地面塌陷问题却日益凸显,成为影响城市地质环境安全的重要因素之一。与传统的地质灾害相比,城市地面…

golang channel底层实现?

底层数据实现 type hchan struct { qcount uint // 当前队列中的元素数量 dataqsiz uint // 环形队列的大小 buf unsafe.Pointer // 指向环形队列的指针 elemsize uint16 // 元素大小 closed uint32 // chan…

二叉树链式结构:数据结构中的灵动之舞

目录 前言 一、 前置说明 二、二叉树的遍历 2.1前序遍历 2.2中序遍历 2.3 后序遍历 2.4层序遍历 三、二叉树的遍历的应用 3.1二叉树节点个数: 3.2二叉树的高度 3.3 二叉树第k层的节点的个数 3.4二叉树的查找 总结 前言 在数据结构的世界里,二叉…

docker 安装 Rabbitmq 详解

在平常的开发工作中,我们经常会使用到 rabbitmq,rabbitmq 主要可以进行应用解耦、异步通信、流量削峰、负载均衡、消息持久化、死信队列等。比如商城系统,下单后,通过消息队列通知库存系统、积分系统、物流系统等。发送短信时通过…

3D与2D机器视觉机械臂引导的区别

3D与2D机器视觉在机械臂引导中的主要区别如下: 数据维度 2D视觉:仅处理平面图像,提供X、Y坐标信息,无法获取深度(Z轴)数据。 3D视觉:处理三维空间数据,提供X、Y、Z坐标及物体的姿态…

嵌入式音视频开发(三)嵌入式音视频开发(三)直播协议及编码器

系列文章目录 嵌入式音视频开发(零)移植ffmpeg及推流测试 嵌入式音视频开发(一)ffmpeg框架及内核解析 嵌入式音视频开发(二)ffmpeg音视频同步 嵌入式音视频开发(三)直播协议及编码器…

Swift 的 KeyPath 是什么?

Swift 的 KeyPath 是什么? 一、语法解析二、KeyPath 的核心作用1. 类型安全的属性引用2. 动态访问属性3. 函数式编程与数据驱动 三、SwiftUI 中的典型应用场景1. 动态 UI 组件配置2. 与 dynamicMemberLookup 结合3. 动画与状态管理 四、对比其他技术五、进阶技巧1. …

【前端】Vue组件库之Element: 一个现代化的 UI 组件库

文章目录 前言一、官网1、官网主页2、设计原则3、导航4、组件 二、核心功能:开箱即用的组件生态1、丰富的组件体系2、特色功能亮点 三、快速上手:三步开启组件化开发1、安装(使用Vue 3)2、全局引入3、按需导入(推荐&am…