> 技术文档 > Python爬虫实战:诗词名句网《三国演义》全集

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


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

目标

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

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

要求

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

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

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

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

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

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

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

代码

import requestsfrom bs4 import BeautifulSoupimport reimport osfrom 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_name    tabli_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)