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

爬虫案例—根据四大名著书名抓取并存储为文本文件

爬虫案例—根据四大名著书名抓取并存储为文本文件

诗词名句网:https://www.shicimingju.com

目标:输入四大名著的书名,抓取名著的全部内容,包括书名,作者,年代及各章节内容

诗词名句网主页如下图:

Screenshot 2024-01-18 at 10.51.19

今天的案例是抓取古籍板块下的四大名著,如下图:

Screenshot 2024-01-18 at 10.57.29案例源码如下:

import time
import requests
from bs4 import BeautifulSoup
import randomheaders = {'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36', }# 获取响应页面,并返回实例化soup
def get_soup(html_url):res = requests.get(html_url, headers=headers)res.encoding = res.apparent_encodinghtml = res.content.decode()soup = BeautifulSoup(html, 'lxml')return soup# 返回名著的书名及对应的网址字典
def get_book_url(page_url):book_url_dic = {}soup = get_soup(page_url)div_tag = soup.find(class_="card booknark_card")title_lst = div_tag.ul.find_all(name='li')for title in title_lst:book_url_dic[title.a.text.strip('《》')] = 'https://www.shicimingju.com' + title.a['href']return book_url_dic# 输出每一章节内容
def get_chapter_content(chapter_url):chapter_content_lst = []chapter_soup = get_soup(chapter_url)div_chapter = chapter_soup.find(class_='card bookmark-list')chapter_content = div_chapter.find_all('p')for p_content in chapter_content:chapter_content_lst.append(p_content.text)time.sleep(random.randint(1, 3))return chapter_content_lst# 主程序
if __name__ == '__main__':# 古籍板块链接gj_url = 'https://www.shicimingju.com/book'url_dic = get_book_url(gj_url)mz_name = input('请输入四大名著名称: ')mz_url = url_dic[mz_name]soup = get_soup(mz_url)abbr_tag = soup.find(class_="card bookmark-list")book_name = abbr_tag.h1.textf = open(f'{book_name}.txt', 'a', encoding='utf-8')f.write('书名:'+book_name+'\n')print('名著名称:', book_name, end='\n')p_lst = abbr_tag.find_all('p')for p in p_lst:f.write(p.text+'\n')mulu_lst = soup.find_all(class_="book-mulu")book_ul = mulu_lst[0].ulbook_li = book_ul.find_all(name='li')for bl in book_li:print('\t\t', bl.text)chapter_url = 'https://www.shicimingju.com' + bl.a['href']f.write(bl.text+'\n')f.write(''.join(get_chapter_content(chapter_url))+'\n')f.close()

Screenshot 2024-01-18 at 11.12.49

Screenshot 2024-01-18 at 11.14.54

http://www.lryc.cn/news/283595.html

相关文章:

  • 阿里云容器服务助力万兴科技 AIGC 应用加速
  • STM32F103标准外设库——认识STM32(一)
  • 设计模式——1_5 享元(Flyweight)
  • kafka系列(二)
  • Ubuntu20.04安装配置OpenCV-Python库并首次执行读图
  • 经典目标检测YOLO系列(二)YOLOV2的复现(2)正样本的匹配、损失函数的实现及模型训练
  • 半波整流电路原理详解+参数与计算公式
  • GZ036 区块链技术应用赛项赛题第3套
  • LeetCode142.环形链表II
  • 触摸按键控制LED灯
  • QT自定义控件0-360°刻度尺
  • c语言0基础笔记
  • Vue 中 Element UI 的 el-table 组件实现动态表头和内容
  • 安装sqlserver后—无法连接到 127.0.0.1,1433\sqlexpress
  • Python JSON解析校验格式,输出错误信息的工具
  • 物联网网关与plc怎么连接?
  • HANA:存储过程(Procedures) DEBUG
  • Oracle行转列函数,列转行函数
  • 线程同步--生产者消费者模型
  • React hook+AntD pro实现Form表单的二次封装
  • python异步切片下载文件(内置redis获取任务 mongo更新任务状态等)
  • 《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(10)-Fiddler如何设置捕获Firefox浏览器的Https会话
  • 阿里云云原生弹性方案:用弹性解决集群资源利用率难题
  • Spring-BeanPostProcessor PostConstruct init InitializingBean 执行顺序
  • 【算法】递归
  • DC-1靶机刷题记录
  • rust跟我学七:获取外网IP地址
  • 华为:交换机忘记console密码重置
  • 2024年甘肃省职业院校技能大赛信息安全管理与评估 样题三 模块一
  • Go 中 slice 的 In 功能实现探索