《诗经》那么美,读不懂多浪费|爬取一本好好学习,准备做一个“有文化”的程序人

引言

古人云:“不学诗,无以言”。

意思是:不读《诗经》,连话都不会说了。

《诗经》是中国古代诗歌的开始,也是最早的一部诗歌总集。它的伟大并非内容多艰深,而是生命的百般形态、生活的琐碎日常,万事万物皆可入诗,充满了人间烟火气。草木鸟兽虫鱼、饮食男女、七情六欲……

关雎
佚名 〔先秦〕

关关雎鸠,在河之洲。窈窕淑女,君子好逑。
参差荇菜,左右流之。窈窕淑女,寤寐求之。
求之不得,寤寐思服。悠哉悠哉,辗转反侧。
参差荇菜,左右采之。窈窕淑女,琴瑟友之。
参差荇菜,左右芼之。窈窕淑女,钟鼓乐之。

这一首《关睢》是初中语文课上学的,大多数中国人都能熟练背出前两句吧。诗经中还有很多很多关于爱情、吃穿、礼乐、理想、情感等方面的美句,现在我想用爬虫生成一本《诗经》电子书,好好学习学习。准备做一个“有文化”的程序人,以此向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 的群和公众号:

欢迎关注公众号

 http://qr01.cn/FHYKEa

猜你喜欢

转载自blog.csdn.net/boysoft2002/article/details/120927292