手把手帶你爬取古詩文網全部經典詩詞!品歷代古文百味意蘊,享中華文化千年魅力!

古詩文網作爲傳承經典的網站專注於古詩文服務,致力於讓古詩文愛好者更便捷地發表及獲取古詩文相關資料。

因而古詩文網受到越來越多專家學者的追捧,在這裏,人們可以品歷代古文百味意蘊,享中華文化千年魅力!

作爲生活在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 導入模塊

將前文所述的第三方庫及相關模塊進行導入

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代碼)

# 確定目標網頁URL
page_url = 'https://www.gushiwen.org/default_1.aspx'
# 查看目標網頁HTML代碼
html_code = request.urlopen(page_url).read().decode('utf-8')

值得注意的是,解析該HTML代碼編碼方式應與網頁F12鍵看到的編碼方式一致

第三步:截取目標字符

這一步用到了一個很重要的知識:正則表達式(用於對字符串進行過濾)

關於正則表達式可參考我的原創博文:正則表達式心中有,還愁爬蟲之路不好走?

具體而言,觀察目標字符串部分

首先要明確我們要的部分,就此例來講,就是獲取其中的“苑白泱泱,宮人正靨黃。繞堤龍骨冷,拂岸鴨頭香。別館驚殘夢,停杯泛小觴。幸因流浪處,暫得見何郎。——唐代·李賀《同沈駙馬賦得御溝水》”

運用正則表達式,具體代碼如下

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])

 

第五步:多頁數據操作

以上講述的是單頁數據爬取,對於多頁數據,可以使用for循環來完成。

2.3 總觀代碼

第一部分:古詩文網之推薦部分

'''
爬取推薦部分
'''
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])

第二部分:古詩文網之詩文部分

'''
爬取詩文部分
'''

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版權協議。
                  轉載請附上原文出處鏈接及本聲明。


歡迎留言,一起學習交流~~~

感謝閱讀

END

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章