引言
古人云:“不学诗,无以言”。
意思是:不读《诗经》,连话都不会说了。
《诗经》是中国古代诗歌的开始,也是最早的一部诗歌总集。它的伟大并非内容多艰深,而是生命的百般形态、生活的琐碎日常,万事万物皆可入诗,充满了人间烟火气。草木鸟兽虫鱼、饮食男女、七情六欲……
关雎
佚名 〔先秦〕关关雎鸠,在河之洲。窈窕淑女,君子好逑。
参差荇菜,左右流之。窈窕淑女,寤寐求之。
求之不得,寤寐思服。悠哉悠哉,辗转反侧。
参差荇菜,左右采之。窈窕淑女,琴瑟友之。
参差荇菜,左右芼之。窈窕淑女,钟鼓乐之。
这一首《关睢》是初中语文课上学的,大多数中国人都能熟练背出前两句吧。诗经中还有很多很多关于爱情、吃穿、礼乐、理想、情感等方面的美句,现在我想用爬虫生成一本《诗经》电子书,好好学习学习。准备做一个“有文化”的程序人,以此向1024节致敬!
生成目录
先来做一个诗经目录,简单地用requests获取get网页,再用BeautifulSoup分析。获取诗经风雅颂全部章节,并获取所有能下载的链接(不全因部分诗歌已佚)。代码如下:
from requests import get
from bs4 import BeautifulSoup as bs
webSite = 'https://*********'
def directory():
global Urls
Urls = []
url1 = webSite + '/gushi/shijing.aspx'
text = get(url1)
text.encoding='uft-8'
soup = bs(text.text,'html.parser')
Tags = soup.find_all('div',class_='typecont')
for i,tag in enumerate(Tags):
aTags = tag.find("strong")
print(f'\nNo.{i+1}:《{aTags.text}》\n')
bTags = tag.find_all("a")
try:
Title = [(t.text,t['href']) for t in bTags]
except:
Title = [(t.text,'None') for t in bTags]
for i,t in enumerate(Title):
if t[1]!='None':
Urls.append(t[1])
print(f'{t[0]:<8}',end='\t' if (i+1)%3 else '\n')
if i%3!=2: print()
print('\n'+'='*40)
if __name__=='__main__':
directory()
代码中网址已隐去,微信搜索并关注“PythonTogether”公众号(或者扫码文末的二维码),关注后回复“诗经”获取。运行结果如下:
No.1:《国风·周南》
关雎 葛覃 卷耳
樛木 螽斯 桃夭
兔罝 芣苢 汉广
汝坟 麟之趾========================================
No.2:《国风·召南》
鹊巢 采蘩 草虫
采蘋 甘棠 行露
羔羊 殷其雷 摽有梅
小星 江有汜 野有死麕
何彼襛矣 驺虞========================================
No.3:《国风·邶风》
柏舟 绿衣 燕燕
日月 终风 击鼓
凯风 雄雉 匏有苦叶
谷风 式微 旄丘
简兮 泉水 北门
北风 静女 新台
二子乘舟========================================
No.4:《国风·鄘风》
柏舟 墙有茨 君子偕老
桑中 鹑之奔奔 定之方中
蝃蝀 相鼠 干旄
载驰========================================
No.5:《国风·卫风》
淇奥 考槃 硕人
氓 竹竿 芄兰
河广 伯兮 有狐
木瓜========================================
No.6:《国风·王风》
黍离 君子于役 君子阳阳
国风·王风·扬之水 中谷有蓷 兔爰
葛藟 采葛 大车
丘中有麻========================================
No.7:《国风·郑风》
缁衣 将仲子 叔于田
大叔于田 清人 羔裘
遵大路 女曰鸡鸣 有女同车
山有扶苏 萚兮 狡童
褰裳 丰 东门之墠
风雨 子衿 郑风·扬之水
出其东门 野有蔓草 溱洧========================================
No.8:《国风·齐风》
鸡鸣 还 著
东方之日 东方未明 南山
甫田 卢令 敝笱
载驱 猗嗟========================================
No.9:《国风·魏风》
葛屦 汾沮洳 园有桃
陟岵 十亩之间 伐檀
硕鼠========================================
No.10:《国风·唐风》
蟋蟀 山有枢 扬之水
椒聊 绸缪 杕杜
诗经·羔裘 鸨羽 无衣
有杕之杜 葛生 采苓========================================
No.11:《国风·秦风》
车邻 驷驖 小戎
蒹葭 终南 黄鸟
晨风 秦风·无衣 渭阳
权舆========================================
No.12:《国风·陈风》
宛丘 东门之枌 衡门
东门之池 东门之杨 墓门
防有鹊巢 月出 株林
泽陂========================================
No.13:《国风·桧风》
羔裘 素冠 隰有苌楚
匪风========================================
No.14:《国风·曹风》
蜉蝣 候人 鳲鸠
下泉========================================
No.15:《国风·豳风》
七月 鸱鸮 东山
破斧 伐柯 九罭
狼跋========================================
No.16:《小雅·鹿鸣之什》
鹿鸣 四牡 皇皇者华
常棣 伐木 天保
采薇 出车 小雅·杕杜
鱼丽 南陔(今佚) 白华(今佚)
华黍(今佚)========================================
No.17:《小雅·南有嘉鱼之什》
南有嘉鱼 南山有台 由庚(今佚)
崇丘(今佚) 由仪(今佚) 蓼萧
湛露 彤弓 菁菁者莪
六月 采芑 车攻
吉日========================================
No.18:《小雅·鸿雁之什》
鸿雁 庭燎 沔水
鹤鸣 祈父 白驹
小雅·黄鸟 我行其野 斯干
无羊========================================
No.19:《小雅·节南山之什》
节南山 正月 十月之交
雨无正 小旻 小宛
小弁 巧言 何人斯
巷伯========================================
No.20:《小雅·谷风之什》
谷风 蓼莪 大东
四月 北山 无将大车
小明 鼓钟 楚茨
信南山========================================
No.21:《小雅·甫田之什》
甫田 大田 瞻彼洛矣
裳裳者华 桑扈 鸳鸯
頍弁 车舝 青蝇
宾之初筵========================================
No.22:《小雅·鱼藻之什》
鱼藻 采菽 角弓
菀柳 都人士 采绿
黍苗 隰桑 白华
绵蛮 瓠叶 渐渐之石
苕之华 何草不黄========================================
No.23:《大雅·文王之什》
文王 大明 绵
棫朴 旱麓 思齐
皇矣 灵台 下武
文王有声========================================
No.24:《大雅·生民之什》
生民 行苇 既醉
凫鹥 大雅·假乐 公刘
泂酌 卷阿 民劳
板========================================
No.25:《大雅·荡之什》
荡 抑 桑柔
云汉 崧高 烝民
韩奕 江汉 常武
瞻卬 召旻========================================
No.26:《周颂·清庙之什》
清庙 维天之命 维清
烈文 天作 昊天有成命
我将 时迈 执竞
思文========================================
No.27:《周颂·臣工之什》
臣工 噫嘻 振鹭
丰年 有瞽 潜
雝 载见 有客
武========================================
No.28:《周颂·闵予小子之什》
闵予小子 访落 敬之
小毖 载芟 良耜
丝衣 酌 桓
赉 般========================================
No.29:《鲁颂·駉之什》
駉 有駜 泮水
閟宫========================================
No.30:《商颂》
那 烈祖 玄鸟
长发 殷武========================================
爬取正文生成文件
抓取的内容整理后直接写入文本文件,网址同样已隐去。代码如下:
from requests import get
from bs4 import BeautifulSoup as bs
from time import perf_counter
webSite = 'https://*********'
def directory():
global Urls
Urls = []
url1 = webSite + '/gushi/shijing.aspx'
text = get(url1)
text.encoding='uft-8'
soup = bs(text.text,'html.parser')
Tags = soup.find_all('div',class_='typecont')
output = '《诗经》风雅颂.txt'
with open(output,'w',encoding='utf-8') as tofile:
print('《诗经》总目录\n',file=tofile)
for i,tag in enumerate(Tags):
aTags = tag.find("strong")
print(f'\nNo.{i+1}:《{aTags.text}》\n',file=tofile)
bTags = tag.find_all("a")
try:
Title = [(t.text,t['href']) for t in bTags]
except:
Title = [(t.text,'None') for t in bTags]
for i,t in enumerate(Title):
if t[1]!='None':
Urls.append(t[1])
print(f'{t[0]:<8}',end='\t' if (i+1)%3 else '\n',file=tofile)
if i%3!=2: print(file=tofile)
print('\n'+'='*40,file=tofile)
def content():
output = '《诗经》风雅颂.txt'
with open(output,'a',encoding='utf-8') as tofile:
print('\n《诗经》正文\n',file=tofile)
for i,url in enumerate(Urls):
print(f'\nNo.{i+1}',file=tofile)
url2 = webSite + url
text = get(url2)
text.encoding='uft-8'
soup = bs(text.text,'html.parser')
Tags = soup.find('div',id="sonsyuanwen")
text = str(Tags).replace('<br/>','\n')
text = text.replace('完善','').strip()
text = bs(text,'html.parser').text
while '\n\n' in text:
text = text.replace('\n\n','\n')
print(text,file=tofile)
print('-'*40,file=tofile)
if __name__=='__main__':
directory()
content()
print(f'\n程序运行耗时(s):{perf_counter()}\n')
程序执行后大约50秒,一本电子书《诗经》风雅颂.txt 就生成后了,可以拷贝进kindle设备慢慢看吧。其实网站还有更精彩的诗歌赏析,这些内容有“展开阅读全文”的缩略,这个留待以后再想办法解决。(本篇完)
学习交流 Python 的群和公众号: