宋词300首获取

news/2024/12/28 17:51:02/文章来源:https://www.cnblogs.com/yujie168/p/18637731
宋词三百首获取

近来一段时间无聊,突然被古诗词吸引,之后就有了后续的一系列操作

作为计算机专业,对于批量获取内容肯定首选🕷(仅供个人学习)

首先要有个目标,去哪个网站获取数据,这里就选择了页面简化的唐诗宋词.这里选择里面的宋词分支就好了

通过调用F12控制台会发现所有的词信息都在ul标签下的li标签中这样就很方便了,直接通过定位获取然后循环遍历即可

res = requests.get(url, headers=headers)
res.encoding = res.apparent_encoding
if res.status_code == 200:html = parsel.Selector(res.text)url_list = html.xpath('/html/body/div[3]/main/div[2]/div/div/ul/li')

正常对网站发起请求并将判断返回代码是否为200,如果是则创建一个新的Selector对象

查看文档结构树,标题结构为div->h3->a中的内容即为要获取的词名

词的内容结构为div->div->p即使词的所有信息,但是文档中是使用多个p标签进行换行处理,所以后续获取的内容会进一步处理

text_title = url.xpath('./div/h3/a/text()').get()
text_content = url.xpath('./div/div/p/text()').getall()

get()获取单个属性

getall()根据匹配获取所有属性

由于最开始的词名是包括作者在其中的,所以可以根据进行切割分开词名和作者

Ancient_Poetry = text_title.split('》')
word_name = Ancient_Poetry[0]	#词名
author = Ancient_Poetry[1]		#作者

之后就是对词的内容进行一些符号替换即可

宋词页面是有3个分页的

#首页链接
https://www.tangshisongci.net/songcisanbaishou/
#第二页
https://www.tangshisongci.net/songcisanbaishou_2.html
#第三页
https://www.tangshisongci.net/songcisanbaishou_3.html

除了首页意外后面基本都是替换掉其中的数字即可,这样只需要使用一个循环就能生成链接

for i in range(1, 4):if i == 1:url = 'https://www.tangshisongci.net/songcisanbaishou/'else:url = f'https://www.tangshisongci.net/songcisanbaishou_{i}.html'

至此整个获取流程结束

import requests,parsel
from DataRecorder import Recorderrecorder = Recorder('data.csv')def get_html(url):headers = {"User-Agent": '',}res = requests.get(url, headers=headers)res.encoding = res.apparent_encodingif res.status_code == 200:html = parsel.Selector(res.text)url_list = html.xpath('/html/body/div[3]/main/div[2]/div/div/ul/li')for url in url_list:text_title = url.xpath('./div/h3/a/text()').get()text_content = url.xpath('./div/div/p/text()').getall()Ancient_Poetry = text_title.split('》')word_name = Ancient_Poetry[0]author = Ancient_Poetry[1]content = str(text_content).replace('[','').replace(']','').replace('\'','').replace('。,','。').replace(' ','').replace('!,','!')recorder.add_data((str(word_name + "》"), author, content))for i in range(1, 4):if i == 1:url = 'https://www.tangshisongci.net/songcisanbaishou/'else:url = f'https://www.tangshisongci.net/songcisanbaishou_{i}.html'get_html(url)
recorder.record()

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

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

相关文章

416_前端工程化精讲

416_前端工程化精讲 //合并文档ds script 4357 || 已发布 || 开篇词 | 建立上帝视角,全面系统掌握前端效率工程化 || d6b0ec03a4374536a361909923c61bee 从事前端开发十余年 曾先后在多家大型互联网公司从事前端架构工作 讲师:李思嘉 贝壳找房前端架构组任资深工程师,…

java三阶段总结(家用电路模拟)

前言第六次题目集知识点:抽象类,抽象类不能被直接实例化!有抽象方法,抽象方法没有方法体,由继承它的子类提供具体实现。抽象类可以看作是一种模板,子类在实现接口方法时,必须实现接口中的所有抽象方法,除非子类也是抽象类在抽象类和接口中,多态体现为父类引用变量可以…

Material Design风格纯js确认框和对话框插件

material-modal是一款Material Design风格纯js确认框和对话框插件。该插件通过简单的CSS和JavaScript代码来构建确认框和对话框,是替代浏览器原生确认框和对话框的不错选择。在线预览 下载使用方法 在页面中引入material-modal.css和material-modal.js文件。< link rel=&…

PTA家居电路模拟3到家居模拟电路4

目录 一、答题判题程序第四次迭代 1、题目分析 2、题目类图 3、题目时序图 4、题目思路 二、家居强电电路模拟程序第一次迭代 1、题目分析 2、题目类图 3、题目时序图 4、题目思路 三、家居强电电路模拟程序第二次迭代 1、题目分析 2、题目类图 3、题目时序图 4、题目思路 四、…

Java难绷知识01——IO流的对象流

Java难绷知识01之对象流 本篇文章会探讨一些JavaIO流中比较容易被忽视的对象流,而且会相对的探讨其中的一些细节 其中对于对象流的操作讲解会少一些,主要讨论的是一些细节 在 Java IO 流中,对象流(ObjectInputStream对象输入流 和 ObjectOutputStream对象输出流)用于将对象…

题目集7-8总结

前言题目集的知识点、题量、难度 1.知识点总结:类的定义与实例化: 概念:定义类的属性和方法,创建对象 示例:public class Device { private String id; } 应用:定义各种电气设备类并创建实例继承关系: 概念:子类继承父类特征 示例:class Switch extends Device 应用:所…

Rust和C/C++相关调用总结

一.Windows下Rust与C/C++互相调用 1.C/C++调用rust 1.1动态库调用 1.1.1以LoadLibrary方式显示调用 add.rs #[no_mangle] // 防止 Rust 修改函数名 pub extern "C" fn hello_world() {println!("Hello from Rust!"); }#[no_mangle] pub extern "C&quo…

24.11.20 磁盘管理

磁盘外部结构 磁盘分类:固态硬盘:内部是主板和U盘类似机械硬盘:盘片 主轴 传动手臂 做机械运动 类似DVDNvme硬盘 PCI-E接口大小分类:3.5英寸:台式机2.5英寸:服务器 笔记本接口类型:IDE接口 # 淘汰SCSI接口 # 淘汰SATA接口 # 台式机 笔记本SAS接口 # 企业服务器标配固…

Julia疑难杂症专栏 | 安装问题汇总及其解决方案,从环境配置到结果验证,深度学习、科学计算、数据处理、大模型、并行处理,让你的代码飞起来

1. 下载慢的问题 使用端口问题 2. 下载慢的问题 ,设置镜像源加快速度 3. 一般的安装问题 4. STATA+julia 5. Vscode+julia 6. Jupyter+julia 7. Julia引入PyCall或者PyPlot报错卡顿 8. 彻底删除包的方法 9. Pkg.add("某个包")出现权限问题 permission denied (EACCE…

再战博客园美化(六)

连续剧更新了佬提了一嘴,于是我发现我替换没替换完,现在好了。 这是什么bug明明存在forFlow,但是不让我查询? 弄错了,用.就好light dark回来了,vue没有检查我默认有没有赋值,他只会自己贴一个上去。 算了,那就用vue的切换!不会吧。 在call后出现已被定义,有问题。被重…

arping 工具使用

1. 项目介绍arping 是一个用于在局域网(LAN)中查找特定 IP 地址是否被占用的实用工具。与传统的 ping 命令不同,arping 使用 ARP 协议来发送和接收数据包,从而能够检测到那些阻止 ICMP 请求的主机。arping 可以帮助网络管理员在调试网络时,快速确定哪些 IP 地址已经被占用…

Rules Of JSX 渲染列表 ‼️State

JSX只能拥有一个root元素,即只能有一个父元素。React不会渲染true或false到界面上,但会渲染0,1。 isOpen && <p>Hello!</p> 上述短路表达式意为:只有当isOpen为真时,才会执行第二部分内容,返回第二部分内容。如果isOpen为假且它的值为0,表达式会返回…