趙涵原
(天津大學(xué)仁愛學(xué)院 天津市 301600)
由于Python語言是語言簡潔且有廣泛功能的語言但書寫前首先需要了解HTTP、HTML的協(xié)議,并通過學(xué)習(xí)Python的基礎(chǔ),懂得基本的Python語法。并從中會(huì)使用安裝第三方庫,通過requests庫等為基礎(chǔ)對網(wǎng)頁進(jìn)行抓取數(shù)據(jù)。為了方便從獲取的數(shù)據(jù)中解析出需要的信息,則需用解析庫進(jìn)行解析數(shù)據(jù)。并且解析后的數(shù)據(jù)需要選擇器來提取數(shù)據(jù),同時(shí)可以使用正則表達(dá)式re進(jìn)行提取。但有些網(wǎng)站可能會(huì)設(shè)置反爬,所以在爬取數(shù)據(jù)之前可用Headers-agent冒充代理服務(wù)器進(jìn)行訪問。尤其是可以通過用瀏覽器監(jiān)聽的方式,利用URL再去請求數(shù)據(jù)。但如果遇到極端的反爬手段的話需使用模擬瀏覽器去進(jìn)行數(shù)據(jù)爬取,可以通過冒充COOKIES、偽裝IP、把驗(yàn)證碼進(jìn)行自動(dòng)化識(shí)別等技術(shù)來破解反爬。
豆瓣圖書排行top250書籍爬蟲。
以Python3.8和chrome瀏覽器為主要的環(huán)境,主要模塊有l(wèi)xml、requests、re、csv。
2.2.1 偽裝代理服務(wù)器
當(dāng)我們通過瀏覽器訪問某個(gè)網(wǎng)址的時(shí)候,會(huì)向服務(wù)器發(fā)送一些Headers 頭信息進(jìn)行網(wǎng)頁源碼的解析,選取整個(gè)網(wǎng)頁中的部分源碼,再取出URL,將這些URL處置在準(zhǔn)備就緒的URL隊(duì)列中,并從處置的URL隊(duì)列中取出未進(jìn)行解析的URL,進(jìn)行拆分解釋源碼,從而得到對應(yīng)源的IP。但若存在不允許登錄的情況,此時(shí)冒充服務(wù)器可以根據(jù)字段反映出用戶端的服務(wù)器類型、服務(wù)器版本號型、服務(wù)器的操作環(huán)境和使用情況,網(wǎng)頁排版引擎等客戶端信息并偽裝成瀏覽器來訪問。

圖1:結(jié)果顯示

圖2:豆瓣詞云
所以在請求豆瓣網(wǎng)頁爬取的時(shí)候,輸出的信息中會(huì)出現(xiàn)無法訪問字眼,這時(shí)就需要通過反爬機(jī)制去解決這個(gè)問題。例如:設(shè)置頭信息就是解決requests請求反爬的方法之一,用來假裝自己的虛擬服務(wù)器在爬取數(shù)據(jù)。
2.2.2 設(shè)置響應(yīng)時(shí)間
在爬取豆瓣書籍信息的過程中,因存在爬取豆瓣頁面響應(yīng)時(shí)間慢,且甚至無法爬取的情況產(chǎn)生,因此利用get_one_page的方法,設(shè)置響應(yīng)時(shí)間為15秒。
2.3.1 分析網(wǎng)頁源碼
在抓取網(wǎng)頁源碼的過程中,利用x-path進(jìn)行爬取豆瓣書籍信息,首先導(dǎo)入lxml庫的etree模塊,然后聲明豆瓣網(wǎng)的HTML文本,再以HTML類進(jìn)行初始化,成功構(gòu)造以X-Path解析豆瓣網(wǎng)的對象。
2.3.2 爬取書籍名、網(wǎng)絡(luò)鏈接、作者出處、出版社、出版時(shí)間、書籍價(jià)格、書籍評分、書籍評語等數(shù)據(jù)
在爬取的網(wǎng)頁信息中將所有信息均存儲(chǔ)在類為item的框架,假如先提取其中一個(gè)“紅樓夢”的模塊存入quote中,并利用x-path進(jìn)行分析,再對每個(gè)url進(jìn)行循環(huán),獲取250條書籍信息。然后進(jìn)行提取第二個(gè)p標(biāo)簽的書名簡介,最后從’[]’提取內(nèi)容后返回列表。剩下的內(nèi)容則寫出正則表達(dá)式。但為處理書籍信息保證數(shù)據(jù)規(guī)范格式化,發(fā)現(xiàn)翻譯者這一列有部分可能為空,需要進(jìn)行處理,所以設(shè)定翻譯者的位置處于第五個(gè)空格中時(shí),則可以錄入信息,否則為空。
2.3.3 數(shù)據(jù)封裝
創(chuàng)建data數(shù)組,以書名、作者、翻譯者、評分?jǐn)?shù)量及人數(shù)、引語出版社、出版時(shí)間、出版價(jià)格進(jìn)行封裝。最后利用for語句循環(huán)后得到豆瓣top250的數(shù)據(jù)。
利用CSV以純文本形式存儲(chǔ)表格數(shù)據(jù)。純文本意味著該文件是一個(gè)字符序列,不含必須像二進(jìn)制數(shù)字那樣被解讀的數(shù)據(jù)。CSV文件由任意數(shù)目的記錄組成,記錄間以某種換行符分隔;一般所有記錄都有完全相同的字段序列,都是純文本文件,最終將爬取的數(shù)據(jù)放入CSV中,以Excel方式進(jìn)行查看圖1結(jié)果顯示。
隨著電子書籍行業(yè)的蓬勃發(fā)展,越來越多的傳統(tǒng)書籍市場走向衰退,但同時(shí)導(dǎo)致越來越多的讀者對于海量書籍更加迷茫。對不同類型的電子書籍的喜好程度、需求程度有所不同。所以評分及高頻點(diǎn)擊量是讀者從接受的角度對電子書籍進(jìn)行的評價(jià)和回饋。數(shù)據(jù)可視化的作用是首先對海量書本數(shù)據(jù)進(jìn)行統(tǒng)計(jì)整理,有助于更快地識(shí)別、判斷熱門書籍在海量書本中的定位,并進(jìn)行多方面的比對。
從豆瓣top250的分類來看,以文學(xué)類書籍為讀者熱門,其次是倫理,次之是藝術(shù)。
作為排行第一的文學(xué)類書籍,大眾讀者對文學(xué)書籍是有思想和自身的主觀能動(dòng)性,恰好文學(xué)類書籍能與讀者的思想境界和情操相輔相成,并在閱讀中產(chǎn)生精神上的交流,由此文學(xué)類書籍往往會(huì)成為讀者的第一首選。
其次是倫理類書籍,言情作為人類情感道德的紐帶,能讓讀者產(chǎn)生情感上的沖擊并且在生活中能幫助讀者提升人生觀、價(jià)值觀。
最后是藝術(shù)類和教育類書籍,雖然居于第三位,但是在我們爬取的近百本圖書中,往往會(huì)發(fā)現(xiàn)教育類的評價(jià)下不乏關(guān)于藝術(shù)類的評論。例如很多抽象教學(xué)的書中,會(huì)穿插生動(dòng)的圖畫,則這些黑白或彩色的圖片就會(huì)推動(dòng)教學(xué)的情節(jié)與內(nèi)容,由此可以增加教育書籍的趣味和吸引力。從我們的調(diào)查中發(fā)現(xiàn)教育類書籍的簡單化、趣味化對讀者閱讀往往更加有效。以此相信若將教育和藝術(shù)結(jié)合將會(huì)成為今后一大熱門體裁。
隨著評分的增高,評論數(shù)量不一定會(huì)逐級遞增,而是在8.8-9.0分值之間達(dá)到一個(gè)峰值。這說明分值在這個(gè)區(qū)間的圖書會(huì)更迎合大多數(shù)用戶的閱讀需求,系統(tǒng)在推薦圖書時(shí)也盡量推薦這部分書籍,而不是武斷地認(rèn)為評分越高的書籍越受用戶歡迎。而是要在用戶的生活中能更加快捷地找到時(shí)下流行的閱讀文化,并通過評分判斷在當(dāng)今閱讀文化下書籍的優(yōu)劣。
隨著大數(shù)據(jù)時(shí)代的到來,書籍信息逐漸呈現(xiàn)爆炸式的增長。利用Python進(jìn)行書籍的可視化分析信息就尤為重要。在信息量大且復(fù)雜的情況下,通過數(shù)據(jù)挖掘有用的信息再將其可視化,已成為一個(gè)研究熱點(diǎn)。
隨著電子閱讀逐漸深入到每個(gè)用戶的閱讀習(xí)慣中,對書籍類的信息分類就顯得尤為重要,利用Python爬蟲技術(shù)可將這些信息進(jìn)行可視化分析和處理,系統(tǒng)地展示在熱門標(biāo)簽下。并根據(jù)用戶的書籍需求、書籍之間的關(guān)系、作者關(guān)系及不同因素之間的關(guān)聯(lián)關(guān)系,就可以從讀者喜歡看的書中快速檢索出其他相關(guān)書籍。
本文對網(wǎng)頁信息的研究,初步形成根據(jù)爬取的數(shù)據(jù)為讀者顯示熱門類型書籍,但還需進(jìn)一步探索。
(1)在反爬蟲的處理上只能設(shè)置虛擬代理機(jī)進(jìn)行訪問比較耗費(fèi)時(shí)間,在后續(xù)的學(xué)習(xí)中可以采用其他反爬方法進(jìn)行爬取信息。
(2)若能采用增量式爬蟲可更好地解決動(dòng)態(tài)頁面訪問源碼進(jìn)行爬取數(shù)據(jù)。
(3)在可視化的分析過程中,發(fā)現(xiàn)得到熱門書籍的特征,產(chǎn)生新的聯(lián)想。若能對線上書籍運(yùn)營商提供熱門書籍的特征,在今后可以將爬取的數(shù)據(jù)結(jié)果和用戶評價(jià)相結(jié)合,建立用戶智能化個(gè)性推薦系統(tǒng),從大類的熱門書籍實(shí)現(xiàn)用戶的精準(zhǔn)化需求。