爬虫入门经典(十一) | 一文带你爬取传统古诗词(超级简单!)
??大家好,我是不溫卜火,是一名計算機學院大數據專業大三的學生,昵稱來源于成語—不溫不火,本意是希望自己性情溫和。作為一名互聯網行業的小白,博主寫博客一方面是為了記錄自己的學習過程,另一方面是總結自己所犯的錯誤希望能夠幫助到很多和自己一樣處于起步階段的萌新。但由于水平有限,博客中難免會有一些錯誤出現,有紕漏之處懇請各位大佬不吝賜教!暫時只在csdn這一個平臺進行更新,博客主頁:https://buwenbuhuo.blog.csdn.net/。
PS:由于現在越來越多的人未經本人同意直接爬取博主本人文章,博主在此特別聲明:未經本人允許,禁止轉載!!!
目錄
- 推薦
- 一、小小課堂
- 二、網頁分析
- 2.1 確定要爬取的內容對應的url
- 2.2 分析抓取的主要內容
- 2.3 獲取所有的一級類型(錯誤版本)
- 2.4 獲取所有的一級類型(修改版本)
- 2.5 獲取二級標題
- 2.6 獲取二級類型下詩詞的名稱和url
- 2.7 查詢數據
- 2.7.1 拼接URL
- 2.7.2 內容解析
- 1. xpath解析
- 2. 代碼實現
- 3. 運行結果
- 三、完整代碼
- 四、保存結果
推薦
???各位如果想要交流的話,可以加下QQ交流群:974178910,里面有各種你想要的學習資料。?
???歡迎大家關注公眾號【不溫卜火】,關注公眾號即可以提前閱讀又可以獲取各種干貨哦,同時公眾號每滿1024及1024倍數則會抽獎贈送機械鍵盤一份+IT書籍1份喲~?
一、小小課堂
中國文學源遠流長,早在遠古時代,雖然文字還沒有產生,但在人民中間已經流傳著神話傳說和民間歌謠等口頭文學。隨著時間線的推移,先后出現了:詩經(西周)——楚辭(戰國)——樂府(漢)——賦(晉)——唐詩——宋詞——元曲——明清小說。
現在一提,不知各位想到的是什么。但是博主本人首先想到的詩歌是《阿房宮賦》、《水調歌頭·明月幾時有》、《念奴嬌·赤壁懷古》、《茅屋為秋風所破歌》等等。可能是因為這些個別的詩歌賊長,在高中時期折磨過我的原因吧-。-
現在有一個新的職業——網絡文學作家,他們寫小說發布在網上,通過其有趣的故事情節及其豐富的主分線并行等特點吸引大批作者,從而達到掙錢的目的。但是,不知你知道與否,早在我國古代的明清時期,白話小說就已經蓬勃發展了。在那是,出現了“章回體小說”。一提到“章回體小說”,我們就不得不提到四大名著。名著之所以能夠成為名著,是與其特點分不開的。它們的特點是分回標目,常取一個或兩個中心事件為一回,每回篇幅大致相等,情節前后銜接,開頭、結尾常用“話說”“且聽下回分解”等口頭語,中間穿插詩詞韻文,結尾故設懸念吸引讀者。除了四大名著之外,還有博主最喜歡的兩本書:《儒林外史》、《聊齋志異》。哈哈,博主在此聲明,我不是推銷小說的啊。只是單純的有感而發而已。如果各位想要看看博主推薦的書的話,也是可以的。總之你看了也沒有任何壞處。
我國古典文學如此之多,在整個世界上也是實屬罕見的。那么,作為新世紀國家的創造者,我們因該的做的就是傳承好古典文學。古為今用,弘揚社會主義價值觀,好讓中國文學能夠繼續更好的繼承下去。
現在因該會有讀者會說,改進入正題了。🆗,從現在開始進入正題。
上面說了那么多,雖然看似與本文無關,但是其實是有關系的。想象一下,既然我們要更多的品味古典文學,我們是不是要專門的查看借鑒。但是又由于現在我們的時間都是零碎化的時間快,單獨看書又不太現實。現如今網絡如此之發達,我們每個人基本上都已經離不開電腦、手機了。那么我們可不可以通過Python爬蟲的方式,把這些內容全不爬取出來,然后通過電子設備進行閱讀呢?
下面就開始實現此設想。
二、網頁分析
從理想到現實的第一步,當然是先找到網站了。
古詩文網:https://www.gushiwen.org/
我們打開網址之后,發現網頁如下:
2.1 確定要爬取的內容對應的url
我們先查看網頁的結構
- 1. 先點擊更多 查看多有的類型
- 2. 我們可以看到下圖已經把所有的類型顯示出來
- 3. 通過開發者選項確定起始URL
通過查看,我們可以判定我們的起始URL為:https://so.gushiwen.cn/shiwen/
代碼:
start_url = "https://so.gushiwen.cn/shiwen/" base_url = "https://so.gushiwen.cn"2.2 分析抓取的主要內容
根據上述兩圖我們先確定爬取的內容: 一級類型,二級類型,詩詞名稱,詩詞作者,詩詞內容,詩詞譯文及注釋
2.3 獲取所有的一級類型(錯誤版本)
- 1.分析
- 2. 嘗試xpath解析
- 3.代碼實現
- 4. 結果
不知道,同學們有沒有發現此處有問題呢?
2.4 獲取所有的一級類型(修改版本)
我們上述的解析式其實是有問題的,它是吧所有的包括作者也解析出來了,看下圖:
正確的寫法是這樣的
2.5 獲取二級標題
- 1. 解析
- 2. 代碼
- 3. 結果
2.6 獲取二級類型下詩詞的名稱和url
- 1. xpath解析
- 2. 代碼
2.7 查詢數據
2.7.1 拼接URL
- 1. 拼接一級標題的URL
查詢數據的話,首先我們先拼接一級URL
#一級類型urlurl = base_url + first_type["url"]print(url)first_type_name = first_type["name"]print(first_type_name)- 2. 拼接二級標題的URL
2.7.2 內容解析
1. xpath解析
- 1.詩詞名稱
- 2.詩詞作者
- 3.詩詞內容
- 4.詩詞譯文及注釋
2. 代碼實現
#詩詞作者poetry_author = etree_obj.xpath('//p[@class="source"]')[0].xpath(".//text()")item["poetry_author"] = "".join(poetry_author).strip()#詩詞內容poetry_content = etree_obj.xpath('//*[@id="contson45c396367f59"]/text()')item["poetry_content"] = "".join(poetry_content).strip()#詩詞譯文和注釋if etree_obj.xpath('//div[@class="contyishang"]'):#有的沒有注釋poetry_explain = etree_obj.xpath('//div[@class="contyishang"]')[0].xpath(".//text()")item["poetry_explain"] = "".join(poetry_explain).strip()else:item["poetry_explain"] = ""print(item)為什么會加上判斷語句,是因為網站有反爬機制,通過加上判斷機制,才能夠正常的循環爬取。
3. 運行結果
三、完整代碼
# encoding: utf-8 '''@author 李華鑫@create 2020-10-08 9:42Mycsdn:https://buwenbuhuo.blog.csdn.net/@contact: 459804692@qq.com@software: Pycharm@file: 古詩詞.py@Version:1.0''' """ https://www.gushiwen.cn/ https://so.gushiwen.cn/shiwen/ """ import requests import time import random import csv from lxml import etreestart_url = "https://so.gushiwen.cn/shiwen/" base_url = "https://so.gushiwen.cn"headers = {"user-agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36", }items = []def parse_url(url):"""解析url,得到響應內容"""# time.sleep(random.random())response = requests.get(url=url, headers=headers)return response.content.decode("utf-8")def parse_html(html):"""使用xpath解析html,返回xpath對象"""etree_obj = etree.HTML(html)return etree_objdef get_first_type():"""獲取所有的一級類型"""first_type_list = []html = parse_url(start_url)etree_obj = parse_html(html)first_type_name_list = etree_obj.xpath('(//a[contains(@href,"/gushi/")]|//a[contains(@href,"/wenyan/")])/text()')first_type_url_list = etree_obj.xpath('(//a[contains(@href,"/gushi/")]|//a[contains(@href,"/wenyan/")])/@href')data_zip = zip(first_type_name_list, first_type_url_list)for data in data_zip:first_type = {}first_type["name"] = data[0]first_type["url"] = data[1]first_type_list.append(first_type)return first_type_listdef get_data(first_type):"""查詢數據"""#一級類型urlurl = base_url + first_type["url"]first_type_name = first_type["name"]#向一級類型url發送請求獲取二級類型數據html = parse_url(url)etree_obj = parse_html(html)div_list = etree_obj.xpath('//div[@class="typecont"]')#二級類型類型數據divfor div in div_list:#二級類型名稱second_type_name = div.xpath(".//strong/text()")if second_type_name: # 有的沒有二級類型second_type_name = second_type_name[0]else:second_type_name = ""#二級類型下詩詞的名稱和urlpoetry_name_list = div.xpath(".//span/a/text()")poetry_url_list = div.xpath(".//span/a/@href")data_zip = zip(poetry_name_list,poetry_url_list)for data in data_zip:#item是一個詩詞數據item = {}item["first_type_name"] = first_type_nameitem["second_type_name"] = second_type_nameitem["poetry_name"] = data[0]#詩詞urlpoetry_url = base_url+data[1]html = parse_url(poetry_url)etree_obj = parse_html(html)#詩詞作者poetry_author = etree_obj.xpath('//p[@class="source"]')[0].xpath(".//text()")item["poetry_author"] = "".join(poetry_author).strip()#詩詞內容poetry_content = etree_obj.xpath('//*[@id="contson45c396367f59"]/text()')item["poetry_content"] = "".join(poetry_content).strip()#詩詞譯文和注釋if etree_obj.xpath('//div[@class="contyishang"]'):#有的沒有注釋poetry_explain = etree_obj.xpath('//div[@class="contyishang"]')[0].xpath(".//text()")item["poetry_explain"] = "".join(poetry_explain).strip()else:item["poetry_explain"] = ""print(item)# 保存save(item)def save(item):"""將數據保存到csv中"""with open("./古詩詞.csv", "a", encoding="utf-8") as file:writer = csv.writer(file)writer.writerow(item.values())def start():first_type_list = get_first_type()for first_type in first_type_list:get_data(first_type)if __name__ == '__main__':start()四、保存結果
此程序還有一點小問題,就是由于網站存在有JS加密。有一部分無法正常保存下來。不過沒有關系,等到后期博主會更新破解JS的博文。
美好的日子總是短暫的,雖然還想繼續與大家暢談,但是本篇博文到此已經結束了,如果還嫌不夠過癮,不用擔心,我們下篇見!
??好書不厭讀百回,熟讀課思子自知。而我想要成為全場最靚的仔,就必須堅持通過學習來獲取更多知識,用知識改變命運,用博客見證成長,用行動證明我在努力。
??如果我的博客對你有幫助、如果你喜歡我的博客內容,請“點贊” “評論”“收藏”一鍵三連哦!聽說點贊的人運氣不會太差,每一天都會元氣滿滿呦!如果實在要白嫖的話,那祝你開心每一天,歡迎常來我博客看看。
??碼字不易,大家的支持就是我堅持下去的動力。點贊后不要忘了關注我哦!
總結
以上是生活随笔為你收集整理的爬虫入门经典(十一) | 一文带你爬取传统古诗词(超级简单!)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win7打开win10共享计算机要凭据,
- 下一篇: 中级职称计算机考试复习多久,你以为备考中