当前位置: 首页 > 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.dtcms.com/a/299935.html

相关文章:

  • 服务器:数字世界的隐形引擎
  • 《基于雅可比矢量近似的EIT触觉传感灵敏度非均匀校正》论文解读
  • ESP32实战:5分钟实现PC远程控制LED灯
  • C++类和对象(三)
  • IC测试之pogo pin学习与总结-20250726
  • 进制定义与转换详解
  • 1.Java发展简史与设计哲学
  • 最优估计准则与方法(5)加权最小二乘估计(WLS)_学习笔记
  • 360° 外壁镜头:小物体环外侧检测的创新突破
  • Python day25
  • MySQL中的 redolog
  • 连锁店铺巡查二维码的应用
  • 单片机CPU内部的定时器——滴答定时器
  • 智慧水库边缘计算技术路线与框架设计
  • 21-ospf多区域
  • Python编程:初入Python魔法世界
  • Java 面向对象之方法与方法重载:从基础到实践
  • Go 多模块仓库标签管理教程
  • 详解Aerospike数据库在Linux系统上的安装流程
  • LLM中 词嵌入向量中的正负值表示什么含义
  • Aerospike与Redis深度对比:从架构到性能的全方位解析
  • 【HTML】<script>元素中的 defer 和 async 属性详解
  • 认识泛型、泛型类和泛型接口
  • 服务器生成图片
  • 力扣872. 叶子相似的树
  • Ubuntu系统安装EasyTier组网
  • rt-thread 5.2.1 基于at-start-f437开发过程记录
  • Flutter开发 BUG 记录 (持续更新)
  • [特殊字符] 嵌入式队列精要指南:数据流的艺术与实战
  • Python爬虫实战:研究furl库相关技术