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

Python爬虫实战:诗词名句网《三国演义》全集

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.lryc.cn/news/601074.html

相关文章:

  • Redis C++客户端——通用命令
  • 相机标定相关原理
  • FitCoach AI:基于React+CloudBase的智能健身教练应用开发全解析
  • Ubuntu系统 系统盘和数据盘扩容具体操作
  • S7-200 SMART 数字量 I/O 组态指南:从参数设置到实战案例
  • 6G通感算
  • AI使能的SVD算子:基于深度学习的矩阵分解方法
  • 【计算机组成原理】第一章:计算机系统概述
  • python---元组解包(Tuple Unpacking)
  • Linux内核设计与实现 - 课程大纲
  • 通过redis_exporter监控redis cluster
  • 学习嵌入式的第三十二天-数据结构-(2025.7.24)IO多路复用
  • 数组内存学习
  • 英语听力口语词汇-8.美食类
  • VisionPro系列讲解 - 03 Simulator 模拟器使用
  • 20250726-4-Kubernetes 网络-Service DNS名称解析_笔记
  • MGER实验
  • selenium自动化鼠标和键盘操作
  • 幸福网咖订座点餐小程序的设计与实现
  • Compose笔记(三十八)--CompositionLocal
  • VS Code + LaTeX 绘制电气图完全指南(含 PlantUML 样式参考)
  • 酒店智能门锁SDK新V门锁系统接口函数[2025版]Delphi 7.0——东方仙盟硬件接口库
  • 方正小标宋简3.0,可编辑
  • Python - 100天从新手到大师 - Day6
  • 【科研绘图系列】R语言绘制误差连线散点图
  • freeRTOS 静态创建任务
  • FastAPI入门:安装、Pydantic、并发和并行
  • Day04–链表–24. 两两交换链表中的节点,19. 删除链表的倒数第 N 个结点,面试题 02.07. 链表相交,142. 环形链表 II
  • TCP如何解决网络切换问题
  • Java模块化编程深度指南:从过程式到面向对象的进化之路