宋词300首获取

宋词三百首获取

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

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

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

通过调用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 Recorder

recorder = Recorder('data.csv')


def get_html(url):
    headers = {
        "User-Agent": '',
    }
    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')
        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()

posted @   这阵风是晚安  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示