




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
基于python關(guān)系網(wǎng)絡(luò)數(shù)據(jù)化的實(shí)現(xiàn)摘要隨著現(xiàn)代社會(huì)互聯(lián)網(wǎng)的快速發(fā)展,網(wǎng)民不斷增多,網(wǎng)絡(luò)給我們的現(xiàn)代生活帶來了很多方便之處,但是,它在發(fā)揮對(duì)我們有利的用處的同時(shí),也帶來了存在著一些不好的地方。例如,網(wǎng)絡(luò)加速了人們對(duì)于一些事件的討論的傳播,容易造成一種輿論傾向。因此,針對(duì)熱點(diǎn)話題的數(shù)據(jù)采集和分析可以更好地了解網(wǎng)絡(luò)熱點(diǎn)走向,并加以控制。本文主要從整個(gè)設(shè)計(jì)的技術(shù)要求、系統(tǒng)設(shè)計(jì)、系統(tǒng)實(shí)現(xiàn)展開,圍繞數(shù)據(jù)采集、數(shù)據(jù)分析及數(shù)據(jù)可視化這三個(gè)方面來進(jìn)行闡述。本設(shè)計(jì)利用python語言,通過scrapy框架來抓取數(shù)據(jù),數(shù)據(jù)庫(kù)采用的是mysql,前端框架采用bootstrap和jquery,后端框架采用flask,可視化是利用的echarts工具,進(jìn)行前后端交互,分析熱度與內(nèi)容的關(guān)系,提取文本信息進(jìn)行分類,來實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)狀況的分析。同時(shí),也能夠同步觀察到數(shù)據(jù)的實(shí)時(shí)情況。通過本設(shè)計(jì),可以更有效的了解到網(wǎng)絡(luò)的近況。關(guān)鍵詞:數(shù)據(jù)分析,F(xiàn)lask,Echarts,Mysql
AnalysisandvisualizationofnetworkhotspotdatabasedonpythonAbstractWiththerapiddevelopmentoftheInternetinmodernsociety,andtheincreasingnumberofInternetusers,thenetworkhasbroughtalotofconveniencetoourmodernlife,butitisbeneficialtous,butalsobringssomebadplaces.Forexample,thenetworkacceleratesthespreadofpeople'sdiscussionaboutsomeevents,whichiseasytocauseapublicopiniontendency.Therefore,datacollectionandanalysisonhottopicscanbetterunderstandthetrendofnetworkhotspotsandcontrolthem.Thispapermainlyexpoundsthetechnicalrequirements,systemdesignandsystemrealization:dataacquisition,dataanalysisanddatavisualization.Thisdesignusespythonlanguagetograspthedatathroughscrapyframework.Thedatabaseadoptsmysql,thefront-endframeworkadoptsbootstrapandjquery,andtheback-endframeworkadoptsflask.Visualisaechartstooltoconductfrontandrearend,analyzetherelationshipbetweenheatandcontent,andextracttextinformationtorealizetheanalysisofnetworkstatus.Atthesametime,thereal-timesituationofthedatacanalsobeobservedsimultaneously.Throughthisdesign,wecanmoreeffectivelyunderstandtherecentsituationofthenetwork.Keywords:dataanalysis,Flask,Echarts,Mysql
目錄TOC\o"1-3"\h\u31501第一章緒論 第一章緒論1.1開發(fā)背景及意義由于互聯(lián)網(wǎng)技術(shù)的不斷快速發(fā)展,我們生活周圍到處都是數(shù)據(jù),逐漸被數(shù)據(jù)所充斥著,而這些數(shù)據(jù)再由各種各樣的系統(tǒng)形成大數(shù)據(jù),展現(xiàn)出從量變到質(zhì)變的價(jià)值時(shí)代[1]?;ヂ?lián)網(wǎng)是一個(gè)既對(duì)我們生活的有利的工具,它的到來和發(fā)展給我們的生活帶來了非常大的便捷,可以實(shí)時(shí)并且快速的了解到同一時(shí)間點(diǎn),不同空間所發(fā)生的事情。但是在帶來好處的同時(shí),也給帶來了其他的變化,例如現(xiàn)在各種社交軟件層出不窮,人們可以隨意的在網(wǎng)絡(luò)上發(fā)表自己的觀點(diǎn),在網(wǎng)上一件普通的事情很可能就會(huì)被熱議成一件麻煩的大事,如果在有心人的引導(dǎo)下,會(huì)發(fā)展成一種輿論波動(dòng)。因此,通過搜集互聯(lián)網(wǎng)數(shù)據(jù),對(duì)當(dāng)下熱門事件進(jìn)行分析,掌握它所圍繞的中心主題,了解它的趨勢(shì)和發(fā)展,顯得尤為重要。因此,對(duì)于數(shù)據(jù)的采集在任何一個(gè)任務(wù)中都是顯得極其關(guān)鍵,之后對(duì)于數(shù)據(jù)進(jìn)行處理、分析、預(yù)測(cè)也是基于這個(gè)基礎(chǔ)之上的。對(duì)于數(shù)據(jù)的采集有在傳感器上利用物聯(lián)網(wǎng)的數(shù)據(jù)采集,也有利用網(wǎng)絡(luò)信息技術(shù)的數(shù)據(jù)收集。例如,在智能交通的研究中,有基于GPS的定位信息采集、基于交通攝像頭的視頻采集,基于交通卡口的圖像采集以及基于路口的線圈信號(hào)采集等[2]。但從目前的技術(shù)來看,還沒有技術(shù)能夠在特別短的時(shí)間內(nèi)進(jìn)行搜集、整理、管理這些復(fù)雜又龐大的數(shù)據(jù)。這也導(dǎo)致了了數(shù)據(jù)可視化技術(shù)的快速發(fā)展。隨著各種智能終端設(shè)備的產(chǎn)生,數(shù)據(jù)可視化技術(shù)也趨于成熟。如今,正因?yàn)榧夹g(shù)的發(fā)展便捷,上網(wǎng)人數(shù)逐漸龐大,網(wǎng)絡(luò)上的發(fā)言也占有一席之地。不知道小事是否會(huì)被有心人利用放大,或者重要的事情因?yàn)槿藗兊年P(guān)注傾向而忽略。因此,根據(jù)網(wǎng)絡(luò)熱點(diǎn)研究網(wǎng)民群體所關(guān)注的方向、人數(shù)關(guān)注比較多的事件與熱度的關(guān)系,更夠更加便利地了解到網(wǎng)絡(luò)狀況,并及時(shí)做出防治和調(diào)整。1.2國(guó)內(nèi)外現(xiàn)狀與發(fā)展趨勢(shì)1.2.1國(guó)內(nèi)外研究現(xiàn)狀國(guó)外對(duì)于網(wǎng)絡(luò)熱點(diǎn)的研究較少,主要是針對(duì)技術(shù)研究,尤其是數(shù)據(jù)科學(xué)方面,在數(shù)據(jù)處理上進(jìn)行不斷研究,分析、優(yōu)化和設(shè)計(jì)算法以及一些處理方式。同時(shí),在可視化技術(shù)方面也經(jīng)常用于生活實(shí)踐中,主要針對(duì)遇一些社會(huì)熱點(diǎn)問題。通過查詢資料,《華盛頓郵報(bào)》對(duì)于美國(guó)本土的一些關(guān)于社會(huì)存在的熱度高的問題的報(bào)道,都是通過地圖可視化的方式把想要呈現(xiàn)出來的數(shù)據(jù)表達(dá)出來。可視化技術(shù)在大數(shù)據(jù)時(shí)代得到了快速的發(fā)展和更為廣泛的應(yīng)用,其最大的優(yōu)勢(shì)、突出的地方是簡(jiǎn)單快捷,可視化的效果與數(shù)據(jù)本身的相關(guān)性和聯(lián)系并不是很強(qiáng),僅僅是為了視覺的客觀和便利,但對(duì)數(shù)據(jù)進(jìn)行可視化,也能夠較為清晰的表達(dá)出數(shù)據(jù)之間的聯(lián)系。相對(duì)于國(guó)外,由于近些年來我國(guó)科技的發(fā)展之快以及普及度高,網(wǎng)絡(luò)已經(jīng)成功融入生活,成為生活的一部分。因此,對(duì)于把握網(wǎng)絡(luò)的檢測(cè)和治理顯得尤為重要,在這方面的研究也存在頗多?,F(xiàn)在的主流平臺(tái)主要是微博、豆瓣、知乎等社交軟件,消息盤根錯(cuò)節(jié),很容易被混淆黑白。其中,北京大學(xué)就在利用微博平臺(tái),研發(fā)了微博可視化分析工具,其操作的結(jié)果可以將微博網(wǎng)友的的轉(zhuǎn)發(fā)和評(píng)論之間的層次關(guān)系以圖表的形式在頁(yè)面上展示出來。在這個(gè)可視化結(jié)果里面的每一個(gè)節(jié)點(diǎn)代表一條微博,連線代表轉(zhuǎn)發(fā)關(guān)系,節(jié)點(diǎn)越大其轉(zhuǎn)發(fā)次數(shù)越多,這種方式對(duì)于解釋像微博這樣復(fù)雜數(shù)據(jù)關(guān)系十分不錯(cuò)[3]。1.2.2發(fā)展趨勢(shì)目前,網(wǎng)絡(luò)不斷發(fā)展起來,很多社交軟件、媒體隨之興起,它們的便捷性、匿名性、即時(shí)性,加上網(wǎng)民的參與度變高、不理性的引導(dǎo)、快速的傳播等問題使得整個(gè)網(wǎng)絡(luò)環(huán)境變得更為復(fù)雜。因此,對(duì)于網(wǎng)絡(luò)熱點(diǎn)的管理和檢測(cè)是會(huì)一直發(fā)展下去的,但傳統(tǒng)的人工方式一定會(huì)被淘汰、被機(jī)器所代替,因?yàn)閿?shù)據(jù)龐大靠人力顯得尤為困難。所以,監(jiān)測(cè)軟件的出現(xiàn)和增多是必然趨勢(shì),這將成為企業(yè)的新突破口,新產(chǎn)品也將隨之不斷展現(xiàn)出來。再加上網(wǎng)絡(luò)環(huán)境的長(zhǎng)期引導(dǎo)都需要利用監(jiān)測(cè)來分析和解決的,加強(qiáng)對(duì)于網(wǎng)絡(luò)熱點(diǎn)的觀察,把握和預(yù)測(cè)輿論的走向,了解和分析網(wǎng)民對(duì)于一些問題或者生活上的真實(shí)的要求已經(jīng)成為一種必然的趨勢(shì)。1.3研究的主要內(nèi)容本設(shè)計(jì)主要是在python語言的環(huán)境和基礎(chǔ)下,通過對(duì)微博、百度等網(wǎng)站的網(wǎng)頁(yè)進(jìn)行搜集數(shù)據(jù),來對(duì)抓取的數(shù)據(jù)進(jìn)行分析,從而能夠迅速把握當(dāng)前的網(wǎng)絡(luò)狀況,了解人們目前所感興趣的方向,并快速地對(duì)現(xiàn)狀作出判斷。首先,對(duì)于網(wǎng)絡(luò)輿論問題,通過對(duì)主流的社交軟件的熱點(diǎn)的數(shù)據(jù)分析和可視化進(jìn)行了技術(shù)分析,其中含有數(shù)據(jù)的采集、數(shù)據(jù)的處理、實(shí)時(shí)性的數(shù)據(jù)以及可視化的效果等技術(shù)要求。其次,根據(jù)我們要解決的問題進(jìn)行相對(duì)應(yīng)的需求分析,并且設(shè)計(jì)了整體的框架,對(duì)于scrapy爬蟲、bootstrap+query前端、flask后端以及數(shù)據(jù)庫(kù)的框架結(jié)構(gòu)進(jìn)行了詳細(xì)的描述。最后,結(jié)合需求和設(shè)計(jì)的架構(gòu),對(duì)整個(gè)設(shè)計(jì)進(jìn)行實(shí)現(xiàn),對(duì)數(shù)據(jù)處理的回歸分析、高頻詞的統(tǒng)計(jì)、熱度分析等代碼的詳細(xì)描述。同時(shí),把設(shè)計(jì)中的主要模塊進(jìn)行截圖展示。把實(shí)時(shí)數(shù)據(jù),同采集的數(shù)據(jù)經(jīng)過分析所得到的結(jié)果進(jìn)行一個(gè)比較,能夠保證關(guān)于網(wǎng)絡(luò)熱點(diǎn)的數(shù)據(jù)分析的正確性和有效性。設(shè)計(jì)基于python實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)熱點(diǎn)的觀察和分析,相對(duì)于傳統(tǒng)信息搜集方式,利用現(xiàn)代技術(shù)自動(dòng)化抓取數(shù)據(jù),圖表展示數(shù)據(jù)以及實(shí)時(shí)數(shù)據(jù)的展現(xiàn),操作更加省事實(shí)力,能夠更直觀的知道人們對(duì)于事件的關(guān)注偏向方向并即時(shí)作出調(diào)整。同時(shí),也表現(xiàn)出現(xiàn)代科技在網(wǎng)絡(luò)熱點(diǎn)方面的成效,也為之后類似的分析提供技術(shù)性的參照。1.4論文的結(jié)構(gòu)本文分為六章,對(duì)于網(wǎng)絡(luò)熱點(diǎn)的數(shù)據(jù)分析和可視化的背景、國(guó)內(nèi)外現(xiàn)狀及趨勢(shì)、開發(fā)技術(shù)和環(huán)境、功能需求、架構(gòu)設(shè)計(jì)以及功能模塊進(jìn)行介紹。以下是本文的整體結(jié)構(gòu):第一章:緒論。首先,以設(shè)計(jì)目的為主,對(duì)當(dāng)下開發(fā)背景進(jìn)行描述。然后,對(duì)于國(guó)內(nèi)外的現(xiàn)狀和未來發(fā)展趨勢(shì)進(jìn)行闡述。最后,對(duì)整個(gè)設(shè)計(jì)內(nèi)容以及論文的結(jié)構(gòu)進(jìn)行敘述。第二章:開發(fā)環(huán)境和技術(shù)。根據(jù)設(shè)計(jì)需要運(yùn)用到的環(huán)境和技術(shù),進(jìn)行詳細(xì)介紹和總結(jié)。第三章:系統(tǒng)設(shè)計(jì)。先對(duì)爬蟲模塊、數(shù)據(jù)分析模塊、數(shù)據(jù)可視化模塊進(jìn)行需求分析,然后進(jìn)行架構(gòu)的設(shè)計(jì)。其中爬蟲模塊主要利用scrapy框架;數(shù)據(jù)分析模塊通過熱度分析、詞頻統(tǒng)計(jì)、回歸分析以及實(shí)時(shí)數(shù)據(jù)的對(duì)比進(jìn)行分析;數(shù)據(jù)可視化模塊利用前端和后端分離,進(jìn)行圖表的展示。第四章:系統(tǒng)功能模塊實(shí)現(xiàn)。整個(gè)設(shè)計(jì)主要模塊具體實(shí)現(xiàn)的細(xì)節(jié),對(duì)數(shù)據(jù)結(jié)果進(jìn)行詳細(xì)的分析以及最后效果的展示。第五章:結(jié)論與展望。對(duì)整個(gè)設(shè)計(jì)的實(shí)現(xiàn)進(jìn)行總結(jié),對(duì)結(jié)果進(jìn)行評(píng)價(jià)以及在整個(gè)實(shí)現(xiàn)過程中所遇到的困難、不足進(jìn)行總結(jié),并對(duì)這個(gè)設(shè)計(jì)的未來可進(jìn)行修改和完善的地方進(jìn)行展望。第二章開發(fā)環(huán)境與技術(shù)2.1開發(fā)環(huán)境本設(shè)計(jì)主要針對(duì)微博、百度、知乎熱榜進(jìn)行數(shù)據(jù)采集,通過網(wǎng)頁(yè)爬蟲抓取數(shù)據(jù),對(duì)熱點(diǎn)進(jìn)行分析。具體的開發(fā)環(huán)境如下:1.系統(tǒng)環(huán)境:Windows10系統(tǒng);2.開發(fā)語言:Python3.8,實(shí)現(xiàn)爬取數(shù)據(jù)、數(shù)據(jù)分析以及web框架的搭建;3.開發(fā)平臺(tái):Pycharm;4.數(shù)據(jù)庫(kù):Mysql,用來存儲(chǔ)微博、百度、知乎熱榜的數(shù)據(jù)和實(shí)時(shí)數(shù)據(jù);5.前端開發(fā):Jquery、Bootstrap、Javascript,用來開發(fā)和美化網(wǎng)頁(yè);6.Web框架:Flask框架、Echarts,實(shí)現(xiàn)數(shù)據(jù)可視化;2.2網(wǎng)絡(luò)熱點(diǎn)數(shù)據(jù)采集2.2.1網(wǎng)絡(luò)爬蟲原理抓取、搜尋數(shù)據(jù)主要是通過網(wǎng)絡(luò)爬蟲來完成的。使用爬蟲是為了把我們想獲取的頁(yè)面所在的網(wǎng)頁(yè)放到自己電腦上,從而作為備份。爬蟲的過程主要分為以下幾步步驟:1.設(shè)置一個(gè)URL作為剛開始的URL??梢宰约哼x中一個(gè)URL設(shè)為起始,也可以將自己想要爬取的網(wǎng)頁(yè)設(shè)為最初的URL。2.新的URL可以根據(jù)剛開始設(shè)定的URL,通過這個(gè)URL對(duì)網(wǎng)頁(yè)進(jìn)行爬取來獲得新的URL。3.在之前構(gòu)建的URL列表中放入剛剛獲取的新的URL。4.從用來存儲(chǔ)URL的URL列表中拿出剛剛獲取到的新的URL,并通過新的URL來對(duì)網(wǎng)頁(yè)再一次進(jìn)行信息的爬取,然后再將獲取到的最新的URL從最新的網(wǎng)頁(yè)中取出來,對(duì)以上所有的過程進(jìn)行反復(fù)的操作。5.當(dāng)設(shè)置的程序的停止條件在爬蟲運(yùn)行時(shí),滿足設(shè)計(jì)的需求時(shí),程序就會(huì)停止。在爬蟲程序的編寫過程中,一般會(huì)在程序里面設(shè)置一個(gè)條件來讓程序停止運(yùn)行。如果沒有設(shè)置一個(gè)讓爬蟲停下來的條件,程序?qū)?huì)一直運(yùn)行下去,一直到?jīng)]有新的URL出現(xiàn)才會(huì)就此停下;相反,程序不再爬取信息當(dāng)停止條件滿足時(shí)。2.2.2scrapy框架結(jié)構(gòu)Scrapy框架是用來對(duì)爬取需要的網(wǎng)站的數(shù)據(jù)信息的框架,在實(shí)際生活中得到廣泛的應(yīng)用。用戶開發(fā)程序的時(shí)候使用框架,只需要利用框架下的幾種模塊就可以快速且便利地實(shí)現(xiàn)一個(gè)爬蟲甚至多個(gè)爬蟲的同時(shí)使用。以下是框架的組成部分:1.Spiders(爬蟲器):處理從網(wǎng)頁(yè)上傳遞回來的請(qǐng)求,然后取出我們想要的數(shù)據(jù)從獲得到的結(jié)果中,從而獲取到所需要的數(shù)據(jù)的Item,并且把還繼續(xù)需要的URL輸送到引擎,然后再一次到調(diào)度器的里面。2.Engine(引擎):它是框架的最關(guān)鍵的部分,主要負(fù)責(zé)爬蟲、管道、下載器、調(diào)度器之間的相互通信,對(duì)相關(guān)信息的信號(hào)、數(shù)據(jù)等進(jìn)行傳送。3.Scheduler(調(diào)度器):它的功能把從引擎那邊傳輸過來的請(qǐng)求接受下來,并依據(jù)規(guī)定的方式、行為對(duì)它處理。并且當(dāng)引擎再一次提出需要時(shí),再次把這些內(nèi)容送給引擎[4]。4.Downloader(下載器):它的功能是把引擎那邊送過來的所有的相關(guān)請(qǐng)求下載下來,并將從中獲取到的回應(yīng)再傳輸給引擎,由爬蟲從引擎那里獲取再繼續(xù)進(jìn)行處理。5.ItemPipeline(管道):它的功能是負(fù)責(zé)處理從爬蟲那里獲得的Item,然后對(duì)它們進(jìn)行詳細(xì)分析、過濾、存儲(chǔ)等后面將它們做出處理的地方。6.DownloaderMiddlewares(下載中間件):是一個(gè)位于爬蟲、引擎和下載器中間的一種中間件,主要作用是為了用來處理這三者之間的請(qǐng)求及響應(yīng)。7.SpiderMiddlewares(爬蟲中間件):是一個(gè)用來的進(jìn)行信息的傳遞的組件,但是是可以通過可以通過自己進(jìn)行擴(kuò)展、操作引擎和爬蟲中間件的。它是一種處于爬蟲引擎和爬蟲中間的一種中間件,主要作用是用來處理爬蟲對(duì)于輸入的響應(yīng)和輸出的請(qǐng)求。8.SchedulerMiddlewares(調(diào)度中間件):是處于爬蟲引擎和調(diào)度中間的一種中間件,它的主要作用是為了能夠從爬蟲引擎到調(diào)度之間能夠發(fā)送請(qǐng)求和響應(yīng)。圖2-1scrapy框架架構(gòu)2.2.3網(wǎng)絡(luò)爬蟲技術(shù)1.XPath解析XPath,即XMLPathLanguage,它是一種用來搜尋信息的語言。剛開始的時(shí)候是被用作尋找XML文檔,但是之后又發(fā)現(xiàn)同樣適合運(yùn)用在對(duì)HTML文檔的搜索。因此在編寫爬蟲程序時(shí),也可以做對(duì)想要提取的信息的采集通過XPath這樣的方法。XPath有個(gè)功能也很突出是關(guān)于選擇方面的,十分全面且厲害,它提供了一種路徑選擇表達(dá)的方式,極其簡(jiǎn)明通透。此外,它還提供了超過100個(gè)的內(nèi)建函數(shù),主要用于處理字符串、數(shù)值、時(shí)間、日期等,用來進(jìn)行比較遍歷,近似于可以確定所有想要信息所位于的節(jié)。所以,它是一種特別便捷的語言。但是在網(wǎng)絡(luò)爬蟲中,我們只需要利用XPath這種方法來對(duì)數(shù)據(jù)進(jìn)行搜集。2.正則表達(dá)式正則表達(dá)式,是一種邏輯公式,也被成為規(guī)則表達(dá)式或者正則集合,是通過對(duì)字符串(包括普通字符(例如從26個(gè)單個(gè)字母)和特殊字符(被稱為“元字符”))來進(jìn)行操作的[5]。總而言之,就是很早之前就按照某種規(guī)則規(guī)定好的一些特定字符以及各種利用這些特定字符進(jìn)行不斷的重組和排列,組成一個(gè)“規(guī)則字符串”。正則表達(dá)式也是一種文本模式,它在對(duì)搜索文本進(jìn)行表示時(shí),可以進(jìn)行一個(gè)或多個(gè)字符串的配對(duì)。通過十分簡(jiǎn)潔明了的正則表達(dá)式,就能夠特別快速的對(duì)一個(gè)很復(fù)雜的需求進(jìn)行處理和實(shí)現(xiàn)。3.BeautifulSoup解析BeautifulSoup它的最重要的功能是進(jìn)行數(shù)據(jù)的抓取,從想要獲取的頁(yè)面上。BeautifulSoup還有一個(gè)功能是可以用來解決關(guān)于引航、搜尋、修改分析樹等問題,根據(jù)它所提供的一些函數(shù)來進(jìn)行處理。總之,它是一個(gè)十分便利的方法,通過解析文檔的方式給用戶提供所需要進(jìn)行抓取的數(shù)據(jù)[6],只需要非常少的行數(shù)的代碼就可以用來進(jìn)行搜集數(shù)據(jù),可供使用者靈活地運(yùn)用不同的方法進(jìn)行解析,并提供速度的有效。它的操作步驟如下:(1)先實(shí)現(xiàn)一個(gè)實(shí)例化,對(duì)一個(gè)BeautifulSoup對(duì)象,然后在這個(gè)對(duì)象之中載入想要獲取到的頁(yè)面源碼數(shù)據(jù)。(2)通過對(duì)BeautifulSoup對(duì)象中與之有關(guān)的特性或者方法進(jìn)行調(diào)用,來實(shí)現(xiàn)對(duì)標(biāo)簽位置的定位和數(shù)據(jù)的提取。2.2.4數(shù)據(jù)庫(kù)MySQL是眾多數(shù)據(jù)庫(kù)中的一種,是關(guān)系型的。關(guān)系型這樣的數(shù)據(jù)庫(kù)會(huì)使用不同的表分別把使用的數(shù)據(jù)保存到這些的表的當(dāng)中。而被存儲(chǔ)在這樣的一個(gè)大倉(cāng)庫(kù)內(nèi)的所有數(shù)據(jù),就是通過這樣的方式加快了對(duì)數(shù)據(jù)操作的速度,同時(shí)操作上也更加的靈活。其中,PyMySQL是Python3.x版本中的一個(gè)庫(kù),是Python與MySQL進(jìn)行連接的一個(gè)方法。2.3數(shù)據(jù)分析數(shù)據(jù)分析是指對(duì)通過極其非常龐大的數(shù)據(jù),利用比較恰當(dāng)?shù)暮线m的統(tǒng)計(jì)學(xué)上的分析方法對(duì)它進(jìn)行分析,使數(shù)據(jù)能夠發(fā)揮出它的最大的作用,體現(xiàn)出它本身所存在的價(jià)值。簡(jiǎn)而言之,數(shù)據(jù)分析就是把數(shù)據(jù)中所包含的有用的、有價(jià)值的、所需要的信息提取出來,然后通過一些分析方法形成關(guān)于一些問題的結(jié)論的一個(gè)過程。在現(xiàn)實(shí)生活的實(shí)際應(yīng)用中,通過數(shù)據(jù)分析可以幫助人們輕易做出判斷,再進(jìn)行下一步。2.3.1數(shù)據(jù)清洗數(shù)據(jù)清洗,是指利用數(shù)據(jù)的檢測(cè),從而找到一些顯而易見的錯(cuò)誤,是我們可以很容易從數(shù)據(jù)中找出來的。它主要包括檢查數(shù)據(jù)的一致性,處理無效的數(shù)據(jù)和一些不完整的數(shù)據(jù)等,然后再對(duì)這些數(shù)據(jù)進(jìn)行處理和改正,保證它們的正確性。由于將某個(gè)主題的數(shù)據(jù)的集合起來然后放進(jìn)數(shù)據(jù)倉(cāng)庫(kù)進(jìn)行存儲(chǔ),之后又把位于其他各種系統(tǒng)中的這些數(shù)據(jù)提取出來的,并且還將以往的數(shù)據(jù)包含在里面,這樣就導(dǎo)致了有的數(shù)據(jù)產(chǎn)生了錯(cuò)誤、有的數(shù)據(jù)與其他不同的數(shù)據(jù)之間產(chǎn)生了矛盾,這些問題是不可避免且存在的。并這些錯(cuò)誤的或有相抵觸的數(shù)據(jù)也是在處理過程中必須處理或者清除的,被成為“臟數(shù)據(jù)”。這就要依據(jù)特定的方法把“臟數(shù)據(jù)”去除。數(shù)據(jù)清洗可利用的方法有一致性檢查、無效值和缺失值的處理、重復(fù)記錄的檢測(cè)、錯(cuò)誤值檢測(cè)等。2.3.2文本分析1.詞云詞云是對(duì)采集的數(shù)據(jù)種的文本信息進(jìn)行數(shù)據(jù)分析的一種方法,就是通過對(duì)文本進(jìn)行分詞劃分,然后生成與關(guān)鍵詞有關(guān)的詞云或者統(tǒng)計(jì)這些被劃分出來的關(guān)鍵詞所出現(xiàn)的次數(shù),然后篩選出文本劃分出來次數(shù)較多的關(guān)鍵詞。詞云展示那些頻率很高的關(guān)鍵詞,從而去掉其他沒有其他用途的文本信息,使使用者能夠直接通過視覺了解到這類信息的著重點(diǎn)和突出的地方,迅速明白信息所要表達(dá)的內(nèi)容。使用詞云分析的步驟如下:(1)確定想要表達(dá)的主題。思考希望表現(xiàn)得主題和內(nèi)容,方便使用者看到重點(diǎn)。(2)收集數(shù)據(jù)。對(duì)所要進(jìn)行分析的內(nèi)容去獲取相關(guān)的數(shù)據(jù)。(3)文本分詞。運(yùn)用python底下的jieba這個(gè)包,對(duì)進(jìn)行文本的劃分,將提取關(guān)鍵詞并統(tǒng)計(jì)其出現(xiàn)的頻率。2.高頻詞分析高頻詞分析就是讀取抓取并保存的文本信息,對(duì)其進(jìn)行分詞,統(tǒng)計(jì)關(guān)鍵詞的出現(xiàn)次數(shù),將關(guān)鍵詞以及它所對(duì)應(yīng)的次數(shù)保存下來。之后再次讀取數(shù)據(jù),提取頻率出現(xiàn)較高的數(shù)據(jù),通過圖表和數(shù)據(jù)的展示,讓人更能清晰的了解到信息的偏向方面以及所聚焦的方面。2.3.3熱度分析熱度分析,主要是分析所得的數(shù)據(jù)的熱度與排名的關(guān)系。利用直方圖、折線圖、散點(diǎn)圖、熱力圖來展現(xiàn)出熱度與排名所呈現(xiàn)出來的關(guān)系。讓人更能透徹的知曉這兩者之間的聯(lián)系,以及所呈現(xiàn)出來的趨勢(shì)變化和速率變化。2.3.4回歸分析回歸分析,指的是指的是一種統(tǒng)計(jì)分析方法,用來確定兩種或兩種以上變量間彼此相互依存的定量關(guān)系。在大數(shù)據(jù)分析應(yīng)用中,它是用于對(duì)因變量(目標(biāo))和自變量(預(yù)測(cè)器)之間的關(guān)系進(jìn)行研究。這種技術(shù)通常常被用來進(jìn)行預(yù)測(cè)、構(gòu)建時(shí)間序列模型以及發(fā)現(xiàn)變量之間所存在的因果關(guān)系。1.一元線性回歸一元線性回歸分析,指的是只含有一個(gè)自變量的線性相關(guān)的關(guān)系的方法。因此,利用一元線性回歸分析的方法來進(jìn)行預(yù)測(cè),是通過自變量和因變量之間所存在的聯(lián)系,來建立線性回歸方程的,從而進(jìn)再進(jìn)行預(yù)測(cè)。一元線性回歸分析法的預(yù)測(cè)模型為:2.多項(xiàng)式回歸多項(xiàng)式回歸,是指回歸函數(shù)是由多個(gè)變量組成的回歸式子。由于,當(dāng)多項(xiàng)式的次數(shù)趨向于無窮大時(shí),可以逼近任何一種函數(shù),借此推算出一種無限逼近的公式來進(jìn)行預(yù)測(cè),誤差也有些許減少。因此,多項(xiàng)式回歸有著廣泛應(yīng)用[11]。多元回歸分析法的模型為:3.最小二乘法最小二乘法,是一種在誤差估計(jì)、不確定度、系統(tǒng)辨識(shí)及預(yù)測(cè)、預(yù)報(bào)等數(shù)據(jù)處理諸多學(xué)科領(lǐng)域得到廣泛應(yīng)用的數(shù)學(xué)工具[7]。它又稱最小平方法,是一種通過數(shù)學(xué)來進(jìn)行優(yōu)化的技術(shù)。它是通過最小化誤差的平方和尋找與數(shù)據(jù)的最符合的函數(shù)進(jìn)行配對(duì)。利用最小二乘法可以非常快的計(jì)算出并得到未知的數(shù)據(jù),并使這些得到的數(shù)據(jù)與實(shí)際數(shù)據(jù)之間誤差的平方和達(dá)到最小[7][8-9]。最小二乘法在曲線的擬合上還可以被進(jìn)行使用,此外也可通過將能量趨向于最小,或著將熵趨向于最大,以此來解決其他一些需要優(yōu)化的問題,最后用最小二乘法進(jìn)行處理[10]2.4數(shù)據(jù)可視化隨著可視化技術(shù)的不斷更新和發(fā)展、在生活應(yīng)用方面軟件的增加、各種展示表現(xiàn)的形式的層出不窮以及添加了可修改的動(dòng)態(tài)效果、可以進(jìn)行交互使用等功能,數(shù)據(jù)可視化的應(yīng)用不斷擴(kuò)大,像所有剛出來的比較新的概念一樣,引起了許多人的興趣和投入。在以前的應(yīng)用中,經(jīng)常運(yùn)用到直方圖、散點(diǎn)圖、柱狀圖等,都是最基礎(chǔ)且普通的統(tǒng)計(jì)圖表,被應(yīng)用了許多年,現(xiàn)在依舊在使用途中。數(shù)據(jù)可視化在實(shí)際生活中的應(yīng)用,它的多態(tài)性和豐富的表現(xiàn)方式吸引了許多人并投入使用。不管是動(dòng)態(tài)的還是靜態(tài)的圖形顯示,都給予我們一種嶄新的方式,讓我們能夠發(fā)現(xiàn)不同事物之間各式各樣的聯(lián)系,感受每一時(shí)刻我們周圍所環(huán)繞的信息,并通過使用便捷的數(shù)據(jù)圖表展示出數(shù)據(jù)背后所隱藏的信息。2.4.1Echarts技術(shù)ECharts,是一個(gè)開源的有關(guān)數(shù)據(jù)可視化的庫(kù),可以極其順暢流利地運(yùn)行,實(shí)現(xiàn)動(dòng)態(tài)展示和操作,并且兼容在目前市面上能見到的多數(shù)瀏覽器上。ECharts底層是利用了輕量級(jí)的矢量圖形庫(kù)ZRender,能夠提供更加簡(jiǎn)潔的界面、多態(tài)的交互以及可以自己根據(jù)自己的需求設(shè)計(jì)的可視化的圖表。ECharts目前所包含了基本會(huì)用到的折線圖、柱狀圖、散點(diǎn)圖、餅圖這樣的基礎(chǔ)圖表,在統(tǒng)計(jì)上很形象簡(jiǎn)約的盒形圖,針對(duì)于地理數(shù)據(jù)可視化的地圖、熱力圖、線圖,對(duì)關(guān)系型數(shù)據(jù)進(jìn)行可視化的關(guān)系圖、旭日?qǐng)D等,并且它支持各種圖表之間的混合搭配。它還可以動(dòng)態(tài)可拖曳圖表上的組件,滿足了用戶對(duì)動(dòng)態(tài)切換數(shù)據(jù)的需求,實(shí)現(xiàn)對(duì)數(shù)據(jù)區(qū)域縮放、多圖的聯(lián)動(dòng)、浮標(biāo)等,能夠更貼切的進(jìn)行數(shù)據(jù)分析,展現(xiàn)大數(shù)據(jù)所存在的魅力,能夠更大的放大創(chuàng)新能力,利用構(gòu)思出的最優(yōu)的組合方式表達(dá)數(shù)據(jù)之間的關(guān)聯(lián)。2.4.2Flask技術(shù)Flask是利用Python開發(fā)的Web微型應(yīng)用框架,具有輕量且易于操作、擴(kuò)展性強(qiáng)等特點(diǎn)。因此,利用Flask框架可以使Web應(yīng)用的搭建變得更加便捷,并能快速的完成一個(gè)項(xiàng)目的開發(fā)。在開發(fā)一個(gè)項(xiàng)目時(shí),會(huì)需要前端和后端,前端用來對(duì)界面進(jìn)行構(gòu)造和美化,后端就是根據(jù)前端的需求,調(diào)用所需要的數(shù)據(jù),再傳遞給前端展現(xiàn),而Flask就可以分為前端和后端兩部分。1.前端前端部分的設(shè)計(jì)是通過把jQuery框架和Bootstrap框架結(jié)合起來使用,從而來實(shí)現(xiàn)對(duì)整個(gè)界面和數(shù)據(jù)的展現(xiàn)。(1)jQuery,是一個(gè)很方便、很有效的JavaScript框架。目的是為了提出并引導(dǎo)將代碼量減少,卻可以做到無法想象多的事情。它的最內(nèi)核的極其特別的屬性大概可以概述為:用有獨(dú)一無二的鏈?zhǔn)秸Z法和小而精悍且清晰的多功能接口;擁有效率極高且靈活的css選擇器,并且對(duì)CSS選擇器進(jìn)行延伸和擴(kuò)展等操作。(2)Bootstrap框架,是在HTML、CSS、JavaScript基礎(chǔ)上所開發(fā)的簡(jiǎn)潔、清楚、強(qiáng)大的前端框架,這讓W(xué)eb的開發(fā)更加快速便捷。Bootstrap還為使用者們提供了可觀、可欣賞的HTML和CSS規(guī)范。Bootstrap出世之后受到大家的支持和使用,這也使它成為了很受歡迎的開源項(xiàng)目。目前,在國(guó)內(nèi)的大部分公司里正在使用的框架,也是在Bootstrap的基礎(chǔ)上對(duì)它進(jìn)行性能的優(yōu)化而推出的。2.后端后端部分是利用Flask自帶的app模塊,在收到前端傳遞過來的數(shù)據(jù)請(qǐng)求,利用Python下的SQLAlchemy包或者連接MySQL數(shù)據(jù)庫(kù),實(shí)現(xiàn)對(duì)數(shù)據(jù)的增刪改查,并通過NumPy、pandas、Scikit-learn等庫(kù)對(duì)數(shù)據(jù)進(jìn)行處理和計(jì)算,然后將結(jié)果整合成恰當(dāng)?shù)膉son數(shù)據(jù)的格式通過路由映射到前端,以此來供前端程序調(diào)用和展示。第三章系統(tǒng)設(shè)計(jì)3.1系統(tǒng)的需求分析整個(gè)設(shè)計(jì)主要分為爬蟲模塊、數(shù)據(jù)分析模塊、數(shù)據(jù)可視化模塊三個(gè)主要部分,下面是對(duì)于各個(gè)功能模塊的需求分析:3.1.1爬蟲模塊爬蟲模塊的功能是搜集所需要的網(wǎng)絡(luò)熱點(diǎn)數(shù)據(jù),將其采集下來,主要是對(duì)微博、百度、知乎熱榜數(shù)據(jù)的采集。采集的數(shù)據(jù)包括熱榜的排名、內(nèi)容和相關(guān)的搜索人數(shù)。在獲取完數(shù)據(jù)之后,將數(shù)據(jù)存儲(chǔ)到MySql中,方便之后的使用。3.1.2數(shù)據(jù)分析模塊數(shù)據(jù)分析模塊的功能是對(duì)已經(jīng)保存在數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行觀察、篩選和分析,主要分為數(shù)據(jù)清洗和數(shù)據(jù)分析這兩個(gè)部分。數(shù)據(jù)清洗在此設(shè)計(jì)中的需求就是對(duì)數(shù)據(jù)的缺失值不全和刪除錯(cuò)誤的數(shù)據(jù)。數(shù)據(jù)分析是對(duì)獲取到的數(shù)據(jù)通過熱度與排名的關(guān)系來觀察趨勢(shì),對(duì)數(shù)據(jù)中的內(nèi)容進(jìn)行分詞、提取關(guān)鍵詞來進(jìn)行分析,分析網(wǎng)絡(luò)關(guān)注最多的事情。此外,還可以利用文本特征來進(jìn)行詞云分析、高頻主題詞的統(tǒng)計(jì),預(yù)測(cè)出未來關(guān)注走向。3.1.3數(shù)據(jù)可視化模塊數(shù)據(jù)可視化模塊是對(duì)數(shù)據(jù)進(jìn)行可視化,并通過web展示出來。將數(shù)據(jù)利用數(shù)據(jù)分析得出想要的類型,再調(diào)用Echarts通過圖表的方式展示出來,更清晰明了。Web是利用Bootstrap+Jquery前端框架和Flask后端框架進(jìn)行搭建的,實(shí)現(xiàn)數(shù)據(jù)可視化、前后端數(shù)據(jù)交互以及聯(lián)合數(shù)據(jù)庫(kù)進(jìn)行實(shí)時(shí)數(shù)據(jù)的更新。3.2系統(tǒng)的框架設(shè)計(jì)爬蟲模塊主要還是利用Scrapy框架,以xpath解析的方法對(duì)所需要爬取的網(wǎng)頁(yè)進(jìn)行順序爬取,一個(gè)個(gè)遍歷和比較相關(guān)數(shù)據(jù)的網(wǎng)頁(yè)節(jié)點(diǎn),分別構(gòu)造出微博爬蟲、百度爬蟲、知乎爬蟲。這三個(gè)爬蟲都是爬取這三個(gè)網(wǎng)頁(yè)的熱榜,包括熱榜的數(shù)據(jù)的排名名次、內(nèi)容和搜索人數(shù),也就是熱度。數(shù)據(jù)清洗模塊主要是用pandas里面的函數(shù)來處理缺失值和重復(fù)值。數(shù)據(jù)分析模塊通過采集到的數(shù)據(jù)的熱度與排名進(jìn)行多樣分析,提取熱榜內(nèi)容數(shù)據(jù),從關(guān)鍵詞、熱度等進(jìn)行數(shù)據(jù)分析。數(shù)據(jù)可視化模塊通過Echarts使分析結(jié)果以圖表的形式在web上展現(xiàn)出來,更清晰明了,能夠更好的分析數(shù)據(jù)的特征以及未來發(fā)展趨勢(shì)。圖3-1設(shè)計(jì)結(jié)構(gòu)圖3.3爬蟲模塊設(shè)計(jì)3.3.1Scrapy框架設(shè)計(jì)Scrapy框架本設(shè)計(jì)只用了Spider、ItemPipeline、settings部分。Spider部分有微博、百度、知乎爬蟲的設(shè)計(jì),主要是利用xpath的方法通過遍歷和比較來獲取這些網(wǎng)站熱榜的數(shù)據(jù)。圖3-2為微博爬蟲爬取數(shù)據(jù)獲取流程。圖3-2scrapy爬蟲爬取數(shù)據(jù)流程圖爬蟲部分,首先是要設(shè)置所要請(qǐng)求網(wǎng)頁(yè)的url,運(yùn)行爬蟲程序,對(duì)目標(biāo)網(wǎng)頁(yè)發(fā)送一個(gè)請(qǐng)求,是模仿瀏覽器這樣的一個(gè)操作。在程序獲取到目標(biāo)網(wǎng)頁(yè)傳遞過來的網(wǎng)頁(yè)源代碼的時(shí)候,請(qǐng)求數(shù)據(jù)的功能就完成。然后,通過xpath方法,找到所要獲取頁(yè)面的大的框架的節(jié)點(diǎn),然后再找到排名、內(nèi)容、熱度的網(wǎng)頁(yè)節(jié)點(diǎn),在進(jìn)行程序的編寫。ItemPipeline部分是根據(jù)爬蟲所爬取到的被收集起來的對(duì)象,對(duì)這些對(duì)象進(jìn)行處理。當(dāng)程序運(yùn)行起來時(shí),匹配name字段是符合關(guān)于微博的爬蟲,還是關(guān)于百度爬蟲,還是關(guān)于知乎的爬蟲。然后編寫連接MySQL的程序,將爬取到的數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)中。Settings部分是設(shè)置管道和需要跟mysql連接的一些內(nèi)容的放置,然后將爬取的數(shù)據(jù)存儲(chǔ)到mysql中。3.3.2實(shí)時(shí)數(shù)據(jù)爬蟲實(shí)時(shí)數(shù)據(jù)的爬蟲主要是用xpath和正則表達(dá)式對(duì)數(shù)據(jù)進(jìn)行抓取。圖3-3實(shí)時(shí)數(shù)據(jù)爬蟲流程圖首先,是要將所需要請(qǐng)求的網(wǎng)頁(yè)的url運(yùn)用到程序之中,然后對(duì)目標(biāo)網(wǎng)頁(yè)所存在的服務(wù)器發(fā)送一個(gè)請(qǐng)求。在程序獲取到目標(biāo)網(wǎng)頁(yè)傳遞過來的網(wǎng)頁(yè)源代碼的時(shí)候,請(qǐng)求數(shù)據(jù)的功能就完成。然后打印出請(qǐng)求url的返回狀態(tài),如果成功,那就證明請(qǐng)求沒有問題,繼續(xù)下一步操作。利用bs4方法對(duì)所要獲取的網(wǎng)頁(yè)進(jìn)行分析,找到所要獲取頁(yè)面的大的框架的節(jié)點(diǎn),然后再找到排名、內(nèi)容、熱度的網(wǎng)頁(yè)節(jié)點(diǎn),在進(jìn)行程序的編寫。因?yàn)槭菍?shí)時(shí)數(shù)據(jù)的抓取,所以再運(yùn)用time包,增加一個(gè)時(shí)間戳,用來表示抓取數(shù)據(jù)的時(shí)間。之后再連接數(shù)據(jù)庫(kù),設(shè)置數(shù)據(jù)庫(kù)所需要的一些配置的內(nèi)容,將獲取到的數(shù)據(jù)插入到數(shù)據(jù)庫(kù)中,最后關(guān)閉數(shù)據(jù)庫(kù)。又因?yàn)椋W(wǎng)頁(yè)的熱榜信息是一分鐘更新一次,所以在此設(shè)置了定時(shí)任務(wù),爬取程序?qū)⒁环昼娺\(yùn)行一次,由于網(wǎng)頁(yè)存在反爬蟲,所以為了防止被禁止這個(gè)問題,又設(shè)置了時(shí)間防止被禁。3.4數(shù)據(jù)庫(kù)設(shè)計(jì)數(shù)據(jù)庫(kù)主要存儲(chǔ)的是微博、百度、知乎熱榜的數(shù)據(jù)以及實(shí)時(shí)數(shù)據(jù)。所采集的數(shù)據(jù)主要有以上四部分組成,主要包括熱榜的排名、內(nèi)容和搜索人數(shù)。數(shù)據(jù)庫(kù)采用的是MySQL,分別設(shè)計(jì)成四個(gè)獨(dú)立的數(shù)據(jù)表,用來存儲(chǔ)以上數(shù)據(jù)。3.4.1本地MySQL8.0Scrapy爬取的數(shù)據(jù)存儲(chǔ)到Mysql中。表3-1本地MySQL表(weibo)字段名稱數(shù)據(jù)類型主鍵允許空值說明rankvarcharYY排名contentvarcharNY內(nèi)容hotvarcharNY熱度3.4.2騰訊云服務(wù)器實(shí)時(shí)數(shù)據(jù)的存儲(chǔ)利用的是騰訊云服務(wù)器的數(shù)據(jù)庫(kù),也是基于MySQL??紤]到實(shí)時(shí)數(shù)據(jù)每隔一分鐘采集一詞,本地運(yùn)行可能會(huì)造成卡頓、崩潰或死機(jī)。因此,將數(shù)據(jù)儲(chǔ)存在云數(shù)據(jù)庫(kù)中。這里也分為三個(gè)表,分別對(duì)應(yīng)的微博、百度、知乎,采取的是熱榜的排名、內(nèi)容和熱度。表3-2騰訊云服務(wù)器表(current_weibo)字段名稱數(shù)據(jù)類型主鍵允許空值說明rankvarcharYY排名hotvarcharNY內(nèi)容contentvarcharNY熱度current_timedatetimeNN抓取時(shí)間第四章系統(tǒng)功能模塊實(shí)現(xiàn)4.1爬蟲模塊爬蟲模塊的主要功能就是對(duì)需要采集的數(shù)據(jù)進(jìn)行采集。本設(shè)計(jì)主要是對(duì)熱門社交軟件的熱榜的爬取和它們的實(shí)時(shí)數(shù)據(jù)的爬取,這里采用了scrapy框架對(duì)它們數(shù)據(jù)的采集以及xpath方法和正則表達(dá)式對(duì)網(wǎng)頁(yè)內(nèi)容進(jìn)行解析,根據(jù)不同頁(yè)面的復(fù)雜程度和需求,選擇適合它們的方法來使用。4.1.1scrapy模塊Scrapy框架可以同時(shí)運(yùn)行它的框架下的多個(gè)爬蟲,這個(gè)方法十分簡(jiǎn)潔快捷。多個(gè)爬蟲偽代碼如下:classbaiduSpider(scrapy.Spider):name="baidu"allowed_domains=['']start_urls=['/buzz?b=1&c=513&fr=topbuzz_b341_c513']defparse(self,response,**kwargs):item=BaiduItem()main_list=response.xpath('//div[@class="main"]')print(main_list)formaininmain_list:item['rank']=response.xpath('.//td[@class="first"]/span/text()').extract_first()item['content']=response.xpath('.//td[@class="keyword"]/a/text()').extract_first()item['hot']=response.xpath('.//td[@class="last"]/span/text()').extract_first()yielditem//使用xpath來解析網(wǎng)頁(yè)代碼Item部分代碼如下:classWeiboItem(scrapy.Item):rank=scrapy.Field()content=scrapy.Field()hot=scrapy.Field()passSettings偽代碼如下:USER_AGENT='Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/78.0.3904.108Safari/537.36'ROBOTSTXT_OBEY=FalseITEM_PIPELINES={'data.pipelines.dataPipeline':300,}圖4-1scrapy爬蟲數(shù)據(jù)獲取情況4.1.2實(shí)時(shí)數(shù)據(jù)模塊實(shí)時(shí)數(shù)據(jù)主要是抓取實(shí)時(shí)更新的數(shù)據(jù),由于頁(yè)面信息每一分鐘更新一次,所以設(shè)置的爬蟲也將每一分鐘爬取一次。部分代碼如下:defmain():db=pymysql.connect(host='',port=22639,user='aaa76857',passwd='yiwang1029.',db='data',charset='utf8')cursor=db.cursor()#取游標(biāo)sql="insertintocurrent_weiboVALUES('%s','%s','%s','%s')"http://連接數(shù)據(jù)庫(kù)r=requests.get(url='/top/summary?Refer=top_hot&topnav=1&wvr=6',timeout=10)print(r.status_code)#獲取返回狀態(tài)r.encoding=r.apparent_encodingdemo=r.textsoup=BeautifulSoup(demo,"lxml")t=1result=[]time_stamp=time.strftime('%Y/%m/%d%H:%M',time.localtime(time.time()))#時(shí)間戳foriteminsoup.find_all('tr',class_=''):try:#去掉第一條信息if(t==1):t=0continue#print(link('td'))rank=item.select("td")[0]#熱搜排名content=item.select("td")[1].select("a")[0]hot=item.select("td")[1].select("span")[0]result.append([rank.string,content.string,hot.string,time_stamp])exceptIndexError:passforiteminresult:rank=str(item[0])content=str(item[1])hot=str(item[2])current_time=str(item[3])print(rank,content,hot,current_time)cursor.execute(sql%(rank,content,hot,current_time))//插入數(shù)據(jù)mit()cursor.close()db.close()main()schedule.every(1).minutes.do(main)#檢查部署的情況,如果任務(wù)準(zhǔn)備就緒,就開始執(zhí)行任務(wù)whileTrue:time.sleep(2)schedule.run_pending()圖4-2實(shí)時(shí)數(shù)據(jù)獲取情況4.2數(shù)據(jù)庫(kù)模塊本設(shè)計(jì)采用的是MySQL數(shù)據(jù)庫(kù),存儲(chǔ)爬取的微博、百度、知乎的熱榜的數(shù)據(jù)以及實(shí)時(shí)更新數(shù)據(jù)。本設(shè)計(jì)使用的是NavicatPreminum15可視化工具來給數(shù)據(jù)庫(kù)建立表,可以在它的界面上直接操作連接數(shù)據(jù)庫(kù)并建表。Scrapy主要是通過通道來與數(shù)據(jù)庫(kù)連接,Scrapy與MySQL互連存儲(chǔ)數(shù)據(jù)部分代碼如下:classdataPipeline(object):weibo_name='weibo'baidu_name='baidu'zhihu_name='zhihu'weiboInsert="insertintoweibo(rank,content,hot)values('{rank}','{content}','{hot}')"baiduInsert="insertintobaidu(rank,content,hot)values('{rank}','{content}','{hot}')"zhihuInsert="insertintozhihu(rank,content,hot)values('{rank}','{content}','{hot}')"definit(self,settings):self.settings=settings#pipeline默認(rèn)調(diào)用defprocess_item(self,item,spider):print(item)if=="weibo":sqltext=self.weiboInsert.format(rank=pymysql.escape_string(item['rank']),content=pymysql.escape_string(item['content']),hot=pymysql.escape_string(item['hot']))#spider.log(sqltext)self.cursor.execute(sqltext)elif=="baidu":sqltext=self.baiduInsert.format(rank=pymysql.escape_string(item['rank']),content=pymysql.escape_string(item['content']),hot=pymysql.escape_string(item['hot']))#spider.log(sqltext)self.cursor.execute(sqltext)elif=="zhihu":sqltext=self.zhihuInsert.format(rank=pymysql.escape_string(item['rank']),content=pymysql.escape_string(item['content']),hot=pymysql.escape_string(item['hot']))#spider.log(sqltext)self.cursor.execute(sqltext)else:spider.log('Undefinedname:%s'%)returnitem@classmethoddeffrom_crawler(cls,crawler):returncls(crawler.settings)defopen_spider(self,spider):#連接數(shù)據(jù)庫(kù)self.connect=pymysql.connect(host=self.settings.get('MYSQL_HOST'),port=self.settings.get('MYSQL_PORT'),db=self.settings.get('MYSQL_DBNAME'),user=self.settings.get('MYSQL_USER'),passwd=self.settings.get('MYSQL_PASSWD'),charset='utf8',use_unicode=True)#通過cursor執(zhí)行增刪查改self.cursor=self.connect.cursor()self.connect.autocommit(True)defclose_spider(self,spider):self.cursor.close()self.connect.close()實(shí)時(shí)數(shù)據(jù)存儲(chǔ)到MySQL的部分代碼如下:db=pymysql.connect(host='',port=22639,user='aaa76857',passwd='yiwang1029.',db='data',charset='utf8')cursor=db.cursor()#取游標(biāo)sql="insertintocurrent_weiboVALUES('%s','%s','%s','%s')"http://這里連接到數(shù)據(jù)庫(kù)cursor.execute(sql%(rank,content,hot,current_time))//將數(shù)據(jù)插入數(shù)據(jù)庫(kù)中mit()cursor.close()db.close()//關(guān)閉連接,關(guān)閉數(shù)據(jù)庫(kù)4.3數(shù)據(jù)分析模塊4.3.1文本分析實(shí)現(xiàn)文本分析主要是對(duì)獲取到的數(shù)據(jù)中含有的文本的劃分以及關(guān)鍵詞的統(tǒng)計(jì),本設(shè)計(jì)通過詞云和柱狀圖來展示它們之間的關(guān)系。詞云步驟:(1)文本內(nèi)容的收集。將所有文本單獨(dú)存儲(chǔ)起來。(2)文本分詞。按照一定規(guī)則對(duì)取的文本數(shù)據(jù)進(jìn)行劃分,并統(tǒng)計(jì)它們出現(xiàn)的頻率。本設(shè)計(jì)用jieba包來進(jìn)行分詞處理。(3)繪制詞云。導(dǎo)入wordcloud包,根據(jù)它的使用發(fā)放來進(jìn)行生成。詞云部分代碼如下:all_words=cut_words(top_search)#定義停用詞stop=['的','你','了','將','為','例','','多','再','有','是','等','天','次']words_cut=[]forwordinall_words:ifwordnotinstop:words_cut.append(word)word_count=pd.Series(words_cut).value_counts()wc=WordCloud(font_path="C:\\Windows\\Fonts\\simhei.ttf",#設(shè)置字體background_color="white",#設(shè)置詞云背景顏色max_words=1000,#詞云允許最大詞匯數(shù)max_font_size=200,#最大字體大小random_state=50#配色方案的種數(shù))wc1=wc.fit_words(word_count)#生成詞云高頻關(guān)鍵詞統(tǒng)計(jì)部分代碼:url='/top/summary?Refer=top_hot&topnav=1&wvr=6'#獲取數(shù)據(jù)r=requests.get(url)r.raise_for_status()r.encoding=r.apparent_encodingsoup=BeautifulSoup(r.text,'html.parser')data=soup.find_all('a')d_list=[]foritemindata:d_list.append(item.text)words=d_list#中文分詞result=list(jieba.cut(words[0]))forwordinwords:result.extend(jieba.cut(word))redata=[]foritinresult:iflen(it)<=1:continueelse:redata.append(it)result_str=''.join(redata)key=list(set(redata))x,y=[],[]#篩選數(shù)據(jù)forstinkey:count=redata.count(st)ifcount<=1:continueelse:x.append(st)y.append(count)x.sort()y.sort()圖4-3文本分析圖表4.3.2熱度統(tǒng)計(jì)實(shí)現(xiàn)通過對(duì)抓取的數(shù)據(jù)的熱度和排名進(jìn)行統(tǒng)計(jì),來觀察它的趨勢(shì)走向。熱度分析主要用了散點(diǎn)圖、折線圖、柱狀圖和熱力圖。以下是散點(diǎn)圖、折線圖和柱狀圖的部分代碼:varmyChart=echarts.init(document.getElementById('bar'));option_bar={xAxis:{type:'category',data:[{%foriteminitems%}'{{item[0]}}',{%endfor%}]},yAxis:{type:'value'},series:[{type:'bar',data:[{%foriteminitems%}'{{item[2]}}',{%endfor%}]}],};color:['rgb(131,175,155)','rgb(252,157,154)','rgb(249,205,173)','rgb(200,200,169)',]myChart.setOption(option_bar)熱力圖運(yùn)用的是seaborn包制作,以下是熱力圖的部分代碼:sns.jointplot(x='排名',y='熱度',data=df,kind='kde',cbar=True,color='r',shade=True)plt.title("熱力圖")plt.savefig('F://bishe//static//style//images//heatmap.png')plt.show()圖4-4熱度分析示例圖表4.3.3回歸分析實(shí)現(xiàn)這里運(yùn)用了一元分析、二元分析、三元分析和最小二乘法,以下是多元回歸分析部分代碼:sns.regplot(x=df.排名,y=df.熱度,order=1)plt.savefig(fname="F://bishe//static//style//images//linear_weibo1.png",figsize=[10,10])plt.show()以下是最小二乘法回歸分析部分代碼:deffunc(p,x):a,b,c=preturna*(x**2)+(b*x)+cdef_func(p,x,y):returnfunc(p,x)-yp0=[2,3,4]P=leastsq(er_func,p0,args=(df.排名,df.熱度))a,b,c=P[0]x=np.linspace(0,55,100)y=a*(x**2)+(b*x)+cplt.plot(x,y,color=[0,0,0.8,0.4],label=u"擬合直線",linewidth=2)plt.scatter(x,y,color="c",label=u"擬合數(shù)據(jù)",linewidth=2)plt.legend()圖4-5回歸分析示例圖表4.3.4實(shí)時(shí)數(shù)據(jù)實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)是對(duì)網(wǎng)頁(yè)上不停更新數(shù)據(jù)的抓取,同時(shí)也保持頁(yè)面上數(shù)據(jù)的不斷刷新。以下是實(shí)時(shí)數(shù)據(jù)圖表顯示的部分代碼:varmyChart=echarts.init(document.getElementById('bar'));option_bar={grid:{left:"2%",right:"4%",bottom:"6%",containLabel:true,},xAxis:{type:'value',splitLine:{show:false//不顯示分割線}},yAxis:{type:'category',data:[{%foriteminitems%}'{{item[1]}}',{%endfor%}]},series:[{type:'bar',data:[{%foriteminitems%}'{{item[2]}}',{%endfor%}],label:{show:true,formatter:'{c}',//顯示數(shù)據(jù)帶上百分比position:'right'//控制數(shù)據(jù)顯示位置,‘’right‘’為顯示在柱狀圖右側(cè)}}],color:['rgb(131,175,155)','rgb(252,157,154)','rgb(249,205,173)','rgb(200,200,169)',]};myChart.setOption(option_bar)以下是實(shí)時(shí)數(shù)據(jù)內(nèi)容展示的部分代碼:<tableclass="tabletable-hover"><thead><tr><th>排名</th><th>內(nèi)容</th><th>熱度</th></tr></thead><tbody>{%foriteminitems%}<tr><td>{{item[0]}}</td><td>{{item[1]}}</td><td>{{item[2]}}</td></tr>{%endfor%}</tbody></table>圖4-6實(shí)時(shí)數(shù)據(jù)圖表4.4數(shù)據(jù)可視化模塊數(shù)據(jù)可視化模塊分為前端模塊和后端模塊兩個(gè)部分。后端部分的功能就是接受前端傳遞過來的請(qǐng)求,并作出回應(yīng)。本設(shè)計(jì)利用Flask框架來構(gòu)造web。前端部分是利用Echarts來將圖表展示在頁(yè)面上,并通過jQuery和Bootstrap搭建前端框架和美化界面。4.4.1后端模塊利用Flask框架搭建簡(jiǎn)易的應(yīng)用,通常分為以下幾個(gè)步驟:(1)對(duì)實(shí)例進(jìn)行創(chuàng)建。當(dāng)后端收到來自前端的請(qǐng)求時(shí),就會(huì)對(duì)對(duì)應(yīng)的實(shí)例進(jìn)行調(diào)用,等操作完成時(shí),再向前端返回相對(duì)應(yīng)的數(shù)據(jù)。(2)創(chuàng)建路由和函數(shù)。路由對(duì)應(yīng)著url,當(dāng)在其他前端模板中調(diào)用url,url與相應(yīng)的路由相對(duì)應(yīng)時(shí),就會(huì)調(diào)用相對(duì)應(yīng)的函數(shù)。(3)調(diào)用前端模板。等運(yùn)行完實(shí)例之后,獲取到對(duì)應(yīng)的數(shù)據(jù),F(xiàn)lask相繼會(huì)調(diào)用對(duì)應(yīng)的前端模板,將數(shù)據(jù)傳送到前端界面上。Flask部分代碼代碼,其他類似:@app.route('/weibo1/')//創(chuàng)建路由defweobo1():db=Mysql()items=db.getItems_weibo()returnrender_template(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年冰日磁化杯項(xiàng)目投資價(jià)值分析報(bào)告
- 2025至2030年中國(guó)鋰電級(jí)SBR行業(yè)深度調(diào)研及投資戰(zhàn)略分析報(bào)告
- 2025至2030年中國(guó)平整機(jī)行業(yè)發(fā)展預(yù)測(cè)及投資策略報(bào)告
- 2025至2030年Ⅴ字彈簧鞋楦項(xiàng)目投資價(jià)值分析報(bào)告
- 2025年船用制冷型通風(fēng)機(jī)項(xiàng)目可行性研究報(bào)告
- 2025年腳盆項(xiàng)目可行性研究報(bào)告
- 提升污染防治與生態(tài)修復(fù)的行動(dòng)方案和實(shí)施路徑
- 鈦礦尾礦處理行業(yè)發(fā)展趨勢(shì)與市場(chǎng)前景解析
- 海水淡化行業(yè)發(fā)展動(dòng)態(tài)與未來市場(chǎng)展望分析
- 課題開題報(bào)告:組合碳政策下的城市道路交通系統(tǒng)低碳轉(zhuǎn)型:影響機(jī)理、減排效應(yīng)與政策優(yōu)化研究
- 標(biāo)準(zhǔn)入庫(kù)授權(quán)委托書
- 【消防監(jiān)督管理】中級(jí)專業(yè)技術(shù)任職資格評(píng)審備考題庫(kù)大全-4簡(jiǎn)答、論述題部分
- 河南對(duì)外經(jīng)濟(jì)貿(mào)易職業(yè)學(xué)院教師招聘考試歷年真題
- 個(gè)人遺體捐贈(zèng)協(xié)議書
- 煙花爆竹考試真題模擬匯編(共758題)
- 政府采購(gòu)供應(yīng)商推薦表(附件1)
- 馬原第四章資本主義的本質(zhì)及規(guī)律
- 國(guó)家職業(yè)技能標(biāo)準(zhǔn) 6-30-05-05 挖掘鏟運(yùn)和樁工機(jī)械司機(jī)(2023年版)
- 22S702 室外排水設(shè)施設(shè)計(jì)與施工-鋼筋混凝土化糞池
- 做自己:大學(xué)生職業(yè)生涯發(fā)展智慧樹知到答案章節(jié)測(cè)試2023年哈爾濱工程大學(xué)
- 中國(guó)核工業(yè)集團(tuán)794礦4.6有害氣體中毒事故分析
評(píng)論
0/150
提交評(píng)論