田雪麗 郭志斌 劉夢(mèng)賢
摘要:基于Python的網(wǎng)頁(yè)數(shù)據(jù)爬取與可視化分析是Python爬蟲(chóng)的應(yīng)用及Python數(shù)據(jù)分析的應(yīng)用實(shí)戰(zhàn)。該文首先介紹了有關(guān)Python網(wǎng)絡(luò)爬蟲(chóng)的相關(guān)知識(shí),其次運(yùn)用Requests和BeautifulSoup爬取旅游景點(diǎn)信息,并運(yùn)用Excel和Tableau對(duì)數(shù)據(jù)進(jìn)行分析,將分析結(jié)果進(jìn)行可視化呈現(xiàn),得出有關(guān)旅游景點(diǎn)價(jià)格、銷量、地區(qū)分布等方面的結(jié)論,為用戶合理選擇相關(guān)景點(diǎn)提供了建議。
關(guān)鍵詞:Python;網(wǎng)絡(luò)爬蟲(chóng);可視化分析
中圖分類號(hào):G642? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2022)06-0024-03
開(kāi)放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID):
1 概述
隨著互聯(lián)網(wǎng)的快速發(fā)展,人們能夠利用網(wǎng)絡(luò)獲取各種各樣的信息,使得學(xué)習(xí)與生活更加便捷,但是互聯(lián)網(wǎng)數(shù)據(jù)爆炸性地增長(zhǎng),導(dǎo)致我們會(huì)受到若干無(wú)效信息的干擾,對(duì)有效數(shù)據(jù)的收集顯得尤為困難,網(wǎng)絡(luò)爬蟲(chóng)技術(shù)則可以有效地獲取關(guān)鍵數(shù)據(jù)信息,實(shí)現(xiàn)對(duì)信息的準(zhǔn)確挖掘,達(dá)到對(duì)龐大信息精確檢索的目的,優(yōu)化用戶的網(wǎng)絡(luò)體驗(yàn),節(jié)約時(shí)間與精力[1]。
2 相關(guān)概念
2.1Python語(yǔ)言
Python語(yǔ)言作為一種高級(jí)程序設(shè)計(jì)語(yǔ)言,既面向過(guò)程又面向?qū)ο螅鼡碛械母呒?jí)數(shù)據(jù)結(jié)構(gòu)、動(dòng)態(tài)類型、解釋型語(yǔ)言促使其成為多數(shù)平臺(tái)上編寫(xiě)腳本和快速開(kāi)發(fā)應(yīng)用的編程語(yǔ)言,具有簡(jiǎn)單易學(xué)、免費(fèi)開(kāi)源、可移植、可嵌入等特點(diǎn)[2],目前全國(guó)有多所高校都開(kāi)設(shè)了Python程序設(shè)計(jì)課程。
2.2 爬蟲(chóng)技術(shù)
網(wǎng)絡(luò)爬蟲(chóng)又稱網(wǎng)絡(luò)蜘蛛、網(wǎng)絡(luò)機(jī)器人,是一種按照一定的規(guī)則,自動(dòng)抓取萬(wàn)維網(wǎng)信息的程序或者腳本[3],它可以爬取的內(nèi)容包括文本、圖片、音頻等數(shù)據(jù)。其工作原理是:向客戶端發(fā)送HTTP 請(qǐng)求,將URL提交給服務(wù)器端,服務(wù)器端根據(jù)URL的信息進(jìn)行邏輯處理,并將需要的數(shù)據(jù)返回給客戶端。爬蟲(chóng)的類別包括通用型、聚焦型、增量型、Deep Web型等。
2.3 可視化分析
可視化分析是基于分析理論,利用計(jì)算機(jī)圖形學(xué)和圖像處理技術(shù),將科學(xué)數(shù)據(jù)轉(zhuǎn)換成圖形圖像,實(shí)現(xiàn)用戶與數(shù)據(jù)的交互,它具有增強(qiáng)理解、增強(qiáng)審視、簡(jiǎn)單化等優(yōu)勢(shì),我們常見(jiàn)的可視化表現(xiàn)形式有直方圖、餅圖、散點(diǎn)圖等。
3 數(shù)據(jù)獲取
數(shù)據(jù)獲取是指利用一種裝置,將來(lái)自各種數(shù)據(jù)源的數(shù)據(jù)自動(dòng)收集到一個(gè)裝置中,本文基于去哪兒網(wǎng)站,通過(guò)Python的爬蟲(chóng)技術(shù)獲取相應(yīng)數(shù)據(jù),數(shù)據(jù)獲取的過(guò)程為:發(fā)起請(qǐng)求、獲取地址、分析網(wǎng)頁(yè)、提取數(shù)據(jù)、存儲(chǔ)數(shù)據(jù)。
3.1 發(fā)起請(qǐng)求
數(shù)據(jù)爬取主要是通過(guò)Python爬蟲(chóng)技術(shù)實(shí)現(xiàn)的,通過(guò)對(duì)指定的網(wǎng)站發(fā)起請(qǐng)求,獲得服務(wù)器響應(yīng)的數(shù)據(jù),解析之后存入到Excel中。此次爬取數(shù)據(jù)使用的是Requests庫(kù),Requests庫(kù)作為Python的第三方數(shù)據(jù)庫(kù),能自動(dòng)解碼來(lái)自服務(wù)器的內(nèi)容并基于HTTP頭部對(duì)相應(yīng)的編碼做出有根據(jù)性的推測(cè),它對(duì)指定的URL發(fā)起請(qǐng)求,獲取想要爬取的數(shù)據(jù)頁(yè)面的響應(yīng)信息。爬取網(wǎng)頁(yè)數(shù)據(jù)最常使用的是通用爬取框架,它最大的作用就是讓用戶有效、穩(wěn)定、可靠地爬取網(wǎng)頁(yè)上的內(nèi)容[4]。
3.2 獲取地址
想要獲取去哪兒網(wǎng)站上的西安旅游景點(diǎn)數(shù)據(jù),就需要獲取相應(yīng)數(shù)據(jù)的URL鏈接,以此來(lái)發(fā)起請(qǐng)求。打開(kāi)去哪兒網(wǎng)的網(wǎng)站,我們會(huì)發(fā)現(xiàn)景點(diǎn)數(shù)據(jù)被分為了49頁(yè),每頁(yè)的URL都不相同,所以需要尋找到每頁(yè)URL之間的關(guān)系。通過(guò)翻頁(yè)對(duì)比發(fā)現(xiàn)除了第一頁(yè)以外,每頁(yè)的URL都在最后有一個(gè)page=參數(shù)發(fā)生變化,即從1開(kāi)始,每頁(yè)頁(yè)碼對(duì)應(yīng)著該數(shù)字,因此可以構(gòu)建一個(gè)for循環(huán),用于請(qǐng)求網(wǎng)址。
3.3 分析網(wǎng)頁(yè)
獲取每頁(yè)的URL后,再發(fā)起請(qǐng)求,獲取響應(yīng),對(duì)響應(yīng)進(jìn)行解析。Python中有許多解析庫(kù),通過(guò)對(duì)網(wǎng)頁(yè)數(shù)據(jù)進(jìn)行觀察,選擇BeautifulSoup庫(kù)來(lái)對(duì)該響應(yīng)進(jìn)行解析是最方便的。BeautifulSoup庫(kù)將響應(yīng)轉(zhuǎn)化為一個(gè)樹(shù)結(jié)構(gòu),每一個(gè)結(jié)點(diǎn)都可以成為它的一個(gè)標(biāo)簽對(duì)象[5],然后通過(guò)它的.text屬性提取該標(biāo)簽對(duì)應(yīng)的數(shù)據(jù)。查找單個(gè)標(biāo)簽可以使用find()方法,查找多個(gè)標(biāo)簽可以使用find_all()方法,其中最關(guān)鍵的是對(duì)標(biāo)簽進(jìn)行精確定位,在()中用語(yǔ)句來(lái)實(shí)現(xiàn)。
3.4 提取數(shù)據(jù)
對(duì)頁(yè)面進(jìn)行解析之后,就要對(duì)解析后的響應(yīng)進(jìn)行數(shù)據(jù)提取。我們使用正則表達(dá)式和BeautifulSoup來(lái)對(duì)解析后的網(wǎng)頁(yè)進(jìn)行數(shù)據(jù)的定位和提取。正則表達(dá)式是對(duì)字符串操作的一種邏輯公式,可以通過(guò)一個(gè)特定的組合,從復(fù)雜煩瑣的字符串中快速提取符合條件的字符子串。而B(niǎo)eautifulSoup則更加方便,它可以通過(guò)css選擇器對(duì)元素進(jìn)行定位,通過(guò)樹(shù)形結(jié)構(gòu)依次訪問(wèn)目標(biāo)數(shù)據(jù)標(biāo)簽,具有方便、快捷等特性,因此它是爬蟲(chóng)程序中定位標(biāo)簽位置的首選。
3.5 存儲(chǔ)數(shù)據(jù)
本文采用Excel對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ),Excel的功能是高度集成化的,操作比較簡(jiǎn)單,并且Python中有一個(gè)Openpyxl庫(kù),是專門用來(lái)操作Excel的,使得兩者可以無(wú)縫銜接,同時(shí)因?yàn)閿?shù)據(jù)較少,用Excel來(lái)進(jìn)行管理遠(yuǎn)比數(shù)據(jù)庫(kù)來(lái)進(jìn)行管理更加高效。爬蟲(chóng)程序在爬取數(shù)據(jù)時(shí),將爬取的數(shù)據(jù)構(gòu)建成一個(gè)列表,通過(guò)append()方法,將景點(diǎn)名稱、地區(qū)、熱度、地址、價(jià)格、月銷量、月銷額、經(jīng)緯度等數(shù)據(jù)依次加入Excel表中。
4 數(shù)據(jù)可視化
數(shù)據(jù)可視化首先對(duì)數(shù)據(jù)進(jìn)行一定的處理,包括統(tǒng)計(jì)、去重、整理等,然后以圖形化的形式呈現(xiàn),便于我們更好對(duì)其進(jìn)行識(shí)別、判斷[6]。數(shù)據(jù)可視化過(guò)程包括數(shù)據(jù)處理、可視化、詞云分析、熱度分析、價(jià)格分析、月銷量與月銷額分析、地區(qū)分析。
4.1 數(shù)據(jù)處理
當(dāng)景點(diǎn)數(shù)據(jù)獲取并存儲(chǔ)后,需要對(duì)這些數(shù)據(jù)進(jìn)行處理,將其不滿足可視化需求的數(shù)據(jù)剔除。首先是對(duì)數(shù)據(jù)去重,Excel中自帶去重功能,所以可以通過(guò)Excel進(jìn)行數(shù)據(jù)去重操作。對(duì)去重后的數(shù)據(jù)再次進(jìn)行檢查,發(fā)現(xiàn)它符合分析需求,不需要再進(jìn)行其他數(shù)據(jù)處理操作。
4.2 可視化
當(dāng)數(shù)據(jù)處理完畢后,需要對(duì)這些數(shù)據(jù)進(jìn)行可視化分析,通過(guò)圖表的形式將數(shù)據(jù)中隱藏的信息展現(xiàn)出來(lái)。數(shù)據(jù)可視化分析可以用Excel和Tableau實(shí)現(xiàn)。Excel中自帶圖表,圖表隨著數(shù)據(jù)的變化而變化,呈現(xiàn)的形式多種多樣,可以生成各種高質(zhì)量的圖片。Tableau是一款可視化分析工具,能夠幫助我們快速做出可視化的圖片,同時(shí)它的操作簡(jiǎn)單、易學(xué),用戶體驗(yàn)良好。
本文分別采用了這兩種軟件來(lái)生成不同的圖表,其中景點(diǎn)價(jià)格、景點(diǎn)地區(qū)分布圖是用Excel呈現(xiàn)的,詞云圖、景點(diǎn)熱度、月銷量與月銷額是用Tableau呈現(xiàn)的。
4.3 詞云分析
詞云是由詞條組成的類似云型的彩色圖案,詞條在詞云中所占區(qū)域的大小代表了它出現(xiàn)頻率的高低,從視覺(jué)上達(dá)到更加直觀的效果。通過(guò)對(duì)西安景點(diǎn)簡(jiǎn)介進(jìn)行詞云圖繪制分析,我們很容易發(fā)現(xiàn)西安的特色,文化、歷史、博物館等詞的提及表明西安是一座典型的文化古城,休閑、娛樂(lè)、樂(lè)園等詞的提及體現(xiàn)了西安旅游環(huán)境輕松且多樣,景點(diǎn)詞云分析如圖1所示。
4.4 熱度分析
景點(diǎn)熱度是指在一定時(shí)間內(nèi),以用戶的分享、廣告的宣傳等方式,使得該景點(diǎn)受人們關(guān)注的程度。一般而言,游客越多,該景點(diǎn)的熱度值越高,熱度Top10景點(diǎn)排名如圖2所示。
4.5 價(jià)格分析
景點(diǎn)消費(fèi)總價(jià)格受門票、餐飲、住宿等因素的影響,人們會(huì)依據(jù)自己的消費(fèi)水平選擇不同的旅游景點(diǎn),從景點(diǎn)價(jià)格來(lái)看,去大雁塔音樂(lè)噴泉、滑翔機(jī)、直升機(jī)類的活動(dòng)花銷較大,價(jià)格Top10景點(diǎn)排名如圖3所示。
4.6 月銷量與月銷額分析
門票的月銷量是指在一個(gè)月內(nèi)售出的門票張數(shù),月銷額是指在一個(gè)月內(nèi)售出的門票張數(shù)與單價(jià)的乘積,通過(guò)分析發(fā)現(xiàn)在月銷量與月銷額中,秦始皇帝陵博物院(兵馬俑)居于首位,其次是華清宮和長(zhǎng)恨歌。因此,月銷額受月銷量的影響較大,受價(jià)格的影響較小,月銷量與月銷額Top10景點(diǎn)排名如圖4和圖5所示。
4.7 地區(qū)分析
利用2016版的Excel進(jìn)行平面地圖的繪制,明確景區(qū)所處的地理位置,有助于提前做好規(guī)劃,從圖中我們可以發(fā)現(xiàn)景點(diǎn)主要集中在蓮湖區(qū)、碑林區(qū)、雁塔區(qū),景點(diǎn)地區(qū)分布如圖6所示。
5 結(jié)論
隨著大數(shù)據(jù)時(shí)代的到來(lái),從海量的數(shù)據(jù)中獲取自己所需的數(shù)據(jù)顯得尤為重要,我們需要掌握必要的爬蟲(chóng)技術(shù),快速抓取網(wǎng)頁(yè)數(shù)據(jù)并對(duì)其進(jìn)行可視化分析,幫助人們做出正確的選擇。
本文利用Python的爬蟲(chóng)技術(shù),以去哪兒網(wǎng)的陜西省西安市旅游景點(diǎn)信息為數(shù)據(jù)來(lái)源,利用Python爬蟲(chóng)框架獲取數(shù)據(jù),之后對(duì)數(shù)據(jù)進(jìn)行處理、可視化分析,反映用戶的真實(shí)體驗(yàn)。
參考文獻(xiàn):
[1] 徐志,金偉.Python爬蟲(chóng)技術(shù)的網(wǎng)頁(yè)數(shù)據(jù)抓取與分析[J].數(shù)字技術(shù)與應(yīng)用,2020,38(10):30-32.
[2] 張珩.Python的計(jì)算機(jī)軟件應(yīng)用技術(shù)探討[J].電腦知識(shí)與技術(shù),2020,16(32):96-97,102.
[3] CastilloC.EffectiveWebcrawling[J].ACMSIGIRForum,2005,39(1):55-56.
[4] 簡(jiǎn)悅,汪心瀛,楊明昕.基于Python的豆瓣網(wǎng)站數(shù)據(jù)爬取與分析[J].電腦知識(shí)與技術(shù),2020,16(32):51-53.
[5] RyanMitchell.Python網(wǎng)絡(luò)數(shù)據(jù)采集[M].北京:人民郵電出版社,2016.
[6] 曾誠(chéng).基于Python的網(wǎng)絡(luò)爬蟲(chóng)及數(shù)據(jù)可視化和預(yù)測(cè)分析[J].信息與電腦(理論版),2020,32(9):167-169.
【通聯(lián)編輯:王力】