古詩文網作爲傳承經典的網站專注於古詩文服務,致力於讓古詩文愛好者更便捷地發表及獲取古詩文相關資料。
因而古詩文網受到越來越多專家學者的追捧,在這裏,人們可以品歷代古文百味意蘊,享中華文化千年魅力!
作爲生活在21世紀的一份子,在體驗高新科技帶來的便捷生活的同時,不能忘記中華傳統文化,應該以不同的方式將老祖宗留下的經典代代傳承下去。
在這樣的背景下,本文將運用Python爬蟲技術爬取古詩文網的全部經典詩詞,體驗五千年文明的博大精深!
目錄
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