Beautiful Soup实战案例:爬取"诗词名句网"

目标

爬取"诗词名句网"上的古典文学作品内容,包括书籍目录和章节内容,并将每章内容独立保存为文本文件。

目标网址: 《三国演义》全集在线阅读_史书典籍_诗词名句网

要求

  1. 书籍目录管理:目录名基于书籍名称动态生成

  2. 目录页解析: 下载书籍目录页HTML、解析章节列表结构

  3. 章节信息提取: 构建完整章节URL(基础URL + 相对路径)

  4. 章节内容获取: 下载各章节HTML内容

  5. 内容提取与处理: BS作为主要解析器、提取纯文本内容(去除HTML标签)

  6. 文件存储规范: 文件名安全处理、使用章节名称作为文件名

  7. 进度反馈: 目录创建成功通知 、文件写入成功确认等

代码

import requests
from bs4 import BeautifulSoup
import re
import os
from urllib.parse import urljoin
​
# 创建目录
if not os.path.exists('三国演义'):os.mkdir('三国演义')
​
# 目标网址
url = 'https://www.shicimingju.com/book/sanguoyanyi.html'
​
# 伪装浏览器
headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36 Edg/138.0.0.0'
}
​
# 发送请求,获取响应
response = requests.get(url, headers=headers)
# 进行编码
response.encoding = 'utf-8'
# 转成html对象,从而提取数据
html = BeautifulSoup(response.text,'lxml')
# 得到对象
tablis = html.select('a[class="tabli"]')
# 循环提取数据
for tabli in tablis:my_dict = {'章节名称':'','详情页地址':''}tabli_name = tabli.get_text().strip()if tabli_name:# 将章节名称进行特殊符号的替换safe_name = re.sub(r'[\\/*?<|>]','',tabli_name)my_dict['章节名称'] = safe_nametabli_href = tabli.attrs.get('href')if tabli_href:# 建立完整的url地址new_href = urljoin('https://www.shicimingju.com/',tabli_href)my_dict['详情页地址'] = new_href# 发送二次请求,获取详情内容response_content = requests.get(new_href,headers=headers)response_content.encoding = 'utf-8'# 转成html格式content_html = BeautifulSoup(response_content.text,'lxml')# 获取文本对象div_content = content_html.select('div[class="text p_pad"]')# 提取文章内容content = div_content[0].get_text()
​# 写入文件file_name = f'{safe_name}.txt'with open(os.path.join('三国演义',file_name),'w',encoding='utf-8') as f:f.write(content)print(my_dict)

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

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

相关文章

AWS CAF:企业云转型的战略指南

在数字化转型的大潮中&#xff0c;企业正面临前所未有的变革压力。如何利用云计算驱动业务创新、提升IT敏捷性、优化成本结构&#xff0c;已成为众多企业迫切需要解决的关键课题。然而&#xff0c;云迁移并不是简单地将本地应用“复制”到云上&#xff0c;它是一项牵涉企业组织…

【Redis】Linux 配置Redis

一、Redis介绍 Redis&#xff08;Remote Dictionary Server&#xff09;是一款开源的、高性能的键值对&#xff08;Key-Value&#xff09;存储数据库&#xff0c;由 Salvatore Sanfilippo 于 2009 年开发&#xff0c;采用 ANSI C 语言编写。它以内存存储为核心&#xff0c;支持…

MongoDB数据库高并发商业实践优化·运行优化之不可使用root账户进行MongoDB运行-优雅草卓伊凡

MongoDB数据库高并发商业实践优化运行优化之不可使用root账户进行MongoDB运行-优雅草卓伊凡 引言 关于最近优雅草卓伊凡发布关于MongoDB的内容是由于我们的甲方上线了一个很老的产品&#xff0c;但是他的用户量极大&#xff0c;并且还有各种人搞事情&#xff0c;不断的来GJ&a…

戴尔电脑 Linux 安装与配置指南_导入mysql共享文件夹

本指南将详细介绍在戴尔电脑上安装 Linux 操作系统的步骤&#xff0c;以及后续的重要配置&#xff0c;包括系统选择、安装流程、MySQL 数据恢复、网络配置、文件共享和远程维护等。步骤清晰且配有命令行示例和配置文件示例&#xff0c;适合初中级用户参考。1、Linux 系统选择与…

昇思学习营-DeepSeek-R1-Distill-Qwen-1.5B 模型LoRA微调学习心得

LoRA微调&#xff1a;加入参数式微调冻结原始网络参数&#xff0c;对Attention层中QKV等添加旁支&#xff0c;包含两个低维度的矩阵A和矩阵B&#xff0c;微调过程中仅更新A、B 矩阵效果&#xff1a;训练参数被大幅降低&#xff0c;资源消耗较低。对attention的参数加入如下图所…

彩色转灰度的核心逻辑:三种经典方法及原理对比

灰度实验将彩色图像转换为灰度图像的过程称为灰度化&#xff0c;这种做法在图像处理和计算机视觉领域非常常见。灰度图与彩色图最大的不同就是&#xff1a;彩色图是由R、G、B三个通道组成&#xff0c;而灰度图只有一个通道&#xff0c;也称为单通道图像&#xff0c;所以彩色图转…

Spring Boot 项目启动自动执行逻辑的最佳实践:掌握 CommandLineRunner

前言 Spring Boot 启动阶段,总有些操作迫不及待冲在前线:配置要加载,数据要准备,日志要抢首发,仿佛个个争当“启动 MVP”。如果你也想让项目一启动就自动开工,少写点手动触发的“苦力逻辑”,那 CommandLineRunner 就是你的得力助手。它像那个永远第一个打卡的同事,不喝…

高可用集群KEEPALIVED的详细部署

一.高可用集群 1.1 集群类型 LB&#xff1a;Load Balance 负载均衡 LVS/HAProxy/nginx&#xff08;http/upstream, stream/upstream&#xff09; HA&#xff1a;High Availability 高可用集群 数据库、Redis SPoF: Single Point of Failure&#xff0c;解决单点故障 HPC&#x…

[论文阅读] 人工智能 + 软件工程 | NoCode-bench:评估LLM无代码功能添加能力的新基准

NoCode-bench&#xff1a;评估LLM无代码功能添加能力的新基准 论文&#xff1a;NoCode-bench: A Benchmark for Evaluating Natural Language-Driven Feature Addition 研究背景&#xff1a;当AI尝试给软件"加新功能"&#xff0c;我们需要一张靠谱的"考卷"…

【Git知识】Git 常用知识集合之基础--分支系统与 Tag 标签机制

&#x1f9f0; Git 常用知识集合Git 是程序员的“时间机器”。这份手册帮你从入门到精通&#xff0c;把 Git 玩明白。1️⃣ Git 基础操作流程 &#x1f4cc; 三步走流程&#xff1a;添加 → 提交 → 推送 git add . # 把所有修改加入暂存区 git commit -m …

深入解析 Spark:关键问题与答案汇总

在大数据处理领域&#xff0c;Spark 凭借其高效的计算能力和丰富的功能&#xff0c;成为了众多开发者和企业的首选框架。然而&#xff0c;在使用 Spark 的过程中&#xff0c;我们会遇到各种各样的问题&#xff0c;从性能优化到算子使用等。本文将围绕 Spark 的一些核心问题进行…

Python-初学openCV——对openCV的简单使用

一、概述1、简单介绍OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉库&#xff0c;旨在为实时图像处理提供强大的功能。它由Intel开发&#xff0c;现由开源社区维护。OpenCV 提供了跨平台的解决方案&#xff0c;支持 Windows、Linu…

去中心化时代的通信革命:briefing与cpolar技术融合带来的安全范式革新

文章目录前言1.关于briefing2.本地部署briefing3.使用briefing4.cpolar内网穿透工具安装5.创建远程连接公网地址6.固定briefing公网地址前言 数字协作本该是提升效率的过程&#xff0c;却被这些数据管理问题不断困扰&#xff1a;平台条款中的监控声明、跨网络环境的接入障碍、…

GitHub新手生存指南:AI项目版本控制与协作实战

点击 “AladdinEdu&#xff0c;同学们用得起的【H卡】算力平台”&#xff0c;H卡级别算力&#xff0c;按量计费&#xff0c;灵活弹性&#xff0c;顶级配置&#xff0c;学生专属优惠。 代码仓库创建 分支管理 PR提交 开源项目复现 读者收获&#xff1a;掌握团队开发必备技能…

Axios封装以及添加拦截器

在前端开发中&#xff0c;http请求层的封装可以极大提升代码的复用性和可维护性&#xff0c;本文将完整的用axios封装接口请求&#xff0c;配置请求与响应拦截器&#xff0c;封装统一的请求方法全过程。封装的目的和思路在项目直接用axios发送请求当然没问题&#xff0c;但是如…

C语言中奇技淫巧04-仅对指定函数启用编译优化

相信很多人使用GCC编译代码时&#xff0c;都会接触到gcc -O0/1/2/3/s&#xff0c;知道它可以对工程进行全局优化。 事实上&#xff0c;除了全局优化外&#xff0c;使用GCC扩展方式&#xff0c;我们还可以仅对部分关键函数实施差异化编译优化。 在GCC编译器中&#xff0c;attrib…

HTML Style 对象深度解析:从基础到高级应用

一、Style 对象的核心概念定义与作用 Style 对象是 HTML DOM 中用于操作元素内联样式的接口&#xff0c;通过 element.style 访问。它允许动态修改元素的 CSS 属性&#xff0c;但仅能直接影响内联样式&#xff08;即通过 style 属性直接写在标签中的样式&#xff09;。与外部样…

【C++】定义常量

在 C 中&#xff0c;有两种简单的定义常量的方式&#xff1a; 使用 #define 预处理器。使用 const 关键字。 #define 预处理器 #include <iostream> using namespace std;#define LENGTH 10 #define WIDTH 5 #define NEWLINE \nint main() {int area; area LENGTH …

基于遗传算法的多无人车协同侦察与安全保护策略优化

基于遗传算法的多无人车协同侦察与安全保护策略优化 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff0c;觉得好请收藏。点击跳转到网站。 1. 引言 1.1 研究背景与意义 随着无人系统技术的快速发…

python面向对象编程详解

面向对象编程&#xff08;OOP&#xff09;是一种以对象为核心的编程范式。Python全面支持OOP&#xff0c;主要包含以下核心概念&#xff1a;一、类与对象1.类(Class)类是创建对象的模板或蓝图&#xff0c;它定义了对象的属性和方法。class Dog:# 类属性&#xff08;所有实例共享…