首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >手把手带你爬取古诗文网全部经典诗词!品历代古文百味意蕴,享中华文化千年魅力!

手把手带你爬取古诗文网全部经典诗词!品历代古文百味意蕴,享中华文化千年魅力!

作者头像
荣仔_最靓的仔
发布2021-02-02 17:43:36
发布2021-02-02 17:43:36
2.6K0
举报

古诗文网作为传承经典的网站专注于古诗文服务,致力于让古诗文爱好者更便捷地发表及获取古诗文相关资料。 因而古诗文网受到越来越多专家学者的追捧,在这里,人们可以品历代古文百味意蕴,享中华文化千年魅力! 作为生活在21世纪的一份子,在体验高新科技带来的便捷生活的同时,不能忘记中华传统文化,应该以不同的方式将老祖宗留下的经典代代传承下去。

在这样的背景下,本文将运用Python爬虫技术爬取古诗文网的全部经典诗词,体验五千年文明的博大精深!

目录

1 前期准备

2 案例详解

2.1 导入模块

2.2 爬取思路及核心代码

2.3 总观代码

3 总结声明


1 前期准备

爬取目标:古诗文网全部经典诗词

Python环境:Python 3.8.2

Python编译器:JetBrains PyCharm 2018.1.2 x64

第三方库及模块:urllib.request 模块、re 模块

urllib.request 模块用法详见:https://docs.python.org/zh-cn/3/library/urllib.request.html 因为用到正则表达式,故导入re模块

2 案例详解

2.1 导入模块

将前文所述的第三方库及相关模块进行导入

代码语言:javascript
复制
from urllib import request
import re

2.2 爬取思路及核心代码

第一步:确定目标页面URL地址

本项目将对古诗文网的两部分分别进行爬取

第一部分:古诗文网之推荐部分(url地址:https://www.gushiwen.org/default_1.aspx

第二部分:古诗文网之诗文部分(url地址:https://so.gushiwen.cn/shiwen/default_0AA1.aspx

第二步:查看网页源代码(HTML代码)

代码语言:javascript
复制
# 确定目标网页URL
page_url = 'https://www.gushiwen.org/default_1.aspx'
# 查看目标网页HTML代码
html_code = request.urlopen(page_url).read().decode('utf-8')

值得注意的是,解析该HTML代码编码方式应与网页F12键看到的编码方式一致

第三步:截取目标字符

这一步用到了一个很重要的知识:正则表达式(用于对字符串进行过滤)

关于正则表达式可参考我的原创博文:正则表达式心中有,还愁爬虫之路不好走?

具体而言,观察目标字符串部分

首先要明确我们要的部分,就此例来讲,就是获取其中的“苑白泱泱,宫人正靥黄。绕堤龙骨冷,拂岸鸭头香。别馆惊残梦,停杯泛小觞。幸因流浪处,暂得见何郎。——唐代·李贺《同沈驸马赋得御沟水》”

运用正则表达式,具体代码如下

代码语言:javascript
复制
poetry_info = re.findall(r'<textarea style=" background-color:#F0EFE2; border:0px;overflow:hidden;" cols="1" rows="1" id="txtare(\d+)">(.*?)https://', html_code)

由上易知,得到的是列表类型,首先得到列表长度,然后获取其中每一项并不要前面的数字,具体代码如下

代码语言:javascript
复制
for poetry_comtent in range(len(poetry_info)):
    print(poetry_info[poetry_comtent][1])

第四步:文件保存

代码语言:javascript
复制
with open('all_poetry.txt', 'a+') as f:
    f.write(poetry_info[poetry_comtent][1])

第五步:多页数据操作

以上讲述的是单页数据爬取,对于多页数据,可以使用for循环来完成。

2.3 总观代码

第一部分:古诗文网之推荐部分

代码语言:javascript
复制
'''
爬取推荐部分
'''
from urllib import request
import re

for page_num in range(1,11):
    # 确定目标网页URL
    page_url = 'https://www.gushiwen.org/default_{}.aspx'.format(page_num)
    # 查看目标网页HTML代码
    html_code = request.urlopen(page_url).read().decode('utf-8')
    # 正则表达式提取古诗词文字(输出为列表)
    poetry_info = re.findall(r'<textarea style=" background-color:#F0EFE2; border:0px;overflow:hidden;" cols="1" rows="1" id="txtare(\d+)">(.*?)https://', html_code)
    # 获取列表中的每一目标项
    for poetry_comtent in range(len(poetry_info)):
        print(poetry_info[poetry_comtent][1])
        with open('all_poetry.txt', 'a+') as f:
            f.write(poetry_info[poetry_comtent][1])

第二部分:古诗文网之诗文部分

代码语言:javascript
复制
'''
爬取诗文部分
'''

from urllib import request
import re

for page_num in range(1,101):
    # 确定目标网页URL
    page_url = 'https://so.gushiwen.cn/shiwen/default_0AA{}.aspx'.format(page_num)
    # 查看目标网页HTML代码
    html_code = request.urlopen(page_url).read().decode('utf-8')
    # 正则表达式提取古诗词文字(输出为列表)
    poetry_info = re.findall(r'<textarea style=" background-color:#F0EFE2; border:0px;overflow:hidden;" cols="1" rows="1" id="txtare(\d+)">(.*?)https://', html_code)
    # 获取列表中的每一目标项
    for poetry_comtent in range(len(poetry_info)):
        print(poetry_info[poetry_comtent][1])
        # 文件保存
        with open('all_poetry.txt', 'a+') as f:
            try:
                f.write(poetry_info[poetry_comtent][1])
            except Exception as e:
                print(e)

3 总结声明

最近在复习准备期末考试,7月份后我将系统写作爬虫专栏:Python网络数据爬取及分析「从入门到精通」

感兴趣的叫伙伴们可以先关注一波!

更多原创文章及分类专栏请点击此处→我的主页

★版权声明:本文为CSDN博主「荣仔!最靓的仔!」的原创文章,遵循CC 4.0 BY-SA版权协议。

代码语言:txt
复制
               **转载请附上原文出处链接及本声明。**

欢迎留言,一起学习交流~~~

感谢阅读

END

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/06/27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 前期准备
  • 2 案例详解
    • 2.1 导入模块
    • 2.2 爬取思路及核心代码
    • 2.3 总观代码
  • 3 总结声明
  • 欢迎留言,一起学习交流~~~
  • END
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档