Python實(shí)戰(zhàn)之?dāng)?shù)據(jù)庫(kù)應(yīng)用和數(shù)據(jù)獲取 課件 【Ch09】Python數(shù)據(jù)爬取_第1頁(yè)
Python實(shí)戰(zhàn)之?dāng)?shù)據(jù)庫(kù)應(yīng)用和數(shù)據(jù)獲取 課件 【Ch09】Python數(shù)據(jù)爬取_第2頁(yè)
Python實(shí)戰(zhàn)之?dāng)?shù)據(jù)庫(kù)應(yīng)用和數(shù)據(jù)獲取 課件 【Ch09】Python數(shù)據(jù)爬取_第3頁(yè)
Python實(shí)戰(zhàn)之?dāng)?shù)據(jù)庫(kù)應(yīng)用和數(shù)據(jù)獲取 課件 【Ch09】Python數(shù)據(jù)爬取_第4頁(yè)
Python實(shí)戰(zhàn)之?dāng)?shù)據(jù)庫(kù)應(yīng)用和數(shù)據(jù)獲取 課件 【Ch09】Python數(shù)據(jù)爬取_第5頁(yè)
已閱讀5頁(yè),還剩37頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Python數(shù)據(jù)爬取第九章新工科建設(shè)之路·數(shù)據(jù)科學(xué)與大數(shù)據(jù)系列Python實(shí)戰(zhàn)之?dāng)?shù)據(jù)庫(kù)應(yīng)用和數(shù)據(jù)庫(kù)獲取1爬蟲(chóng)基礎(chǔ)1.爬蟲(chóng)基礎(chǔ)在開(kāi)始分詞與詞頻統(tǒng)計(jì)項(xiàng)目之前,我們先了解幾個(gè)庫(kù)。12pyecharts庫(kù)pyecharts庫(kù)是一個(gè)用于生成Echarts圖表的類(lèi)庫(kù)。Echarts是百度開(kāi)源的一個(gè)數(shù)據(jù)可視化JS庫(kù)。用Echarts生成的圖可視化效果非常棒,pyecharts用于與Python進(jìn)行對(duì)接,方便在Python中直接使用數(shù)據(jù)生成圖。關(guān)于pyecharts庫(kù)的更多信息可以查看官方網(wǎng)站:htp://.jieba分詞庫(kù)jieba(結(jié)巴)是一個(gè)強(qiáng)大的分詞庫(kù),完美支持中文分詞。jieba支持以下3種分詞模式。①精確模式:將句子以最精確的方式切開(kāi),適合文本分析。②全模式:把句子中所有可以成詞的詞語(yǔ)都掃描出來(lái),速度非???,但是不能解決詞語(yǔ)的歧義問(wèn)題。③搜索引擎模式:在精確模式的基礎(chǔ)上,對(duì)長(zhǎng)詞再次切分,提高召回率,適合用于搜索引擎分詞。jieba分詞庫(kù)還支持繁體分詞和自定義詞典。在開(kāi)始分詞與詞頻統(tǒng)計(jì)項(xiàng)目之前,我們先了解幾個(gè)庫(kù)。34BeautifulSoup庫(kù)BeautifulSoup庫(kù)是用Python寫(xiě)的一個(gè)HTML/XML解析器,主要功能是從網(wǎng)頁(yè)爬取需要的數(shù)據(jù)。BeautifulSoup庫(kù)可以很好地處理不規(guī)范標(biāo)記并生成剖析樹(shù)(parsetree).,提供簡(jiǎn)單又常用的導(dǎo)航(navigating)、搜索和修改剖析樹(shù)的操作。BeautifulSoup庫(kù)將HTML解析為對(duì)象進(jìn)行處理,全部頁(yè)面轉(zhuǎn)變?yōu)樽值浠蛘邤?shù)組,相對(duì)于正則表達(dá)式的方式,可以大大簡(jiǎn)化處理過(guò)程。Requests庫(kù)Requests庫(kù)是Python的一個(gè)實(shí)用的HTTP客戶端庫(kù),完全滿足如今網(wǎng)絡(luò)爬蟲(chóng)的需求。在開(kāi)發(fā)使用上,Requests庫(kù)語(yǔ)法簡(jiǎn)單易懂,完全符合Python優(yōu)雅、簡(jiǎn)潔的特性。在兼容性上,Requests庫(kù)完全兼容Python2和Python3。1.爬蟲(chóng)基礎(chǔ)2庫(kù)的安裝與使用2.庫(kù)的安裝與使用2.1在Python中,pyecharts庫(kù)的安裝方式如下:pyecharts庫(kù)的安裝與使用pyecharts庫(kù)的使用示例如下(pyecharts_exp.py):

在當(dāng)前目錄下創(chuàng)建一個(gè)名為static的文件夾,執(zhí)行該示例代碼,會(huì)在static目錄下生成一個(gè)名為pyecharts_exp.html的HTML文件。直接用Chrome或其他瀏覽器打開(kāi)這個(gè)HTML文件,能看到一張如圖9-1所示的圖。2.庫(kù)的安裝與使用2.2在Python中,jieba分詞庫(kù)的安裝方式如下:jieba分詞庫(kù)的安裝與使用jieba分詞庫(kù)的使用示例如下(jieba_exp.py):2.庫(kù)的安裝與使用執(zhí)行示例代碼,得到如下結(jié)果:2.庫(kù)的安裝與使用2.3在Python中,BeautifulSoup庫(kù)的安裝方式如下:BeautifulSoup庫(kù)的安裝與使用BeautifulSoup庫(kù)的使用示例如下(beautiful_soup_exp.py):2.庫(kù)的安裝與使用執(zhí)行示例代碼,得到如下結(jié)果:2.4Requests庫(kù)可以通過(guò)pip安裝,安裝語(yǔ)句如下:Requests庫(kù)的安裝與使用HTTP常用請(qǐng)求有GET和POST兩種,Request庫(kù)區(qū)分不同的請(qǐng)求方式,下面以GET請(qǐng)求為例介紹。Requests庫(kù)實(shí)現(xiàn)GET請(qǐng)求示例如下(get_exp.py):2.庫(kù)的安裝與使用2.庫(kù)的安裝與使用3分詞與詞頻統(tǒng)計(jì)實(shí)戰(zhàn)3.分詞與詞頻統(tǒng)計(jì)實(shí)戰(zhàn)經(jīng)過(guò)前面兩節(jié)知識(shí)點(diǎn)的講解,現(xiàn)在我們結(jié)合這些知識(shí)點(diǎn)實(shí)現(xiàn)以下功能:①?gòu)囊粋€(gè)指定網(wǎng)站爬取對(duì)應(yīng)數(shù)據(jù),本章以爬取百度知道的內(nèi)容為例,根據(jù)輸入指定關(guān)鍵字(關(guān)鍵字不能為空),爬取用該關(guān)鍵字搜索到的問(wèn)題標(biāo)題和問(wèn)題回答,并對(duì)問(wèn)題標(biāo)題以搜索引擎模式進(jìn)行分詞。②將①中爬取的問(wèn)題標(biāo)題、問(wèn)題回答和分詞結(jié)果保存到MySQL數(shù)據(jù)庫(kù)中。③數(shù)據(jù)爬取結(jié)束并保存到數(shù)據(jù)庫(kù)后,從MySQL數(shù)據(jù)庫(kù)中取出保存的記錄,根據(jù)保存的分詞結(jié)果進(jìn)行統(tǒng)計(jì),經(jīng)過(guò)給定的關(guān)鍵詞庫(kù)進(jìn)行過(guò)濾后,統(tǒng)計(jì)各關(guān)鍵詞出現(xiàn)的次數(shù),并以圖表的形式展現(xiàn)出來(lái)。根據(jù)以上要求,下面介紹具體的實(shí)現(xiàn)方式。3.1在chapter9文件夾下創(chuàng)建一些文件或文件夾,功能介紹分別如下。整體結(jié)構(gòu)設(shè)計(jì)①database文件夾用于存放與數(shù)據(jù)庫(kù)直接關(guān)聯(lián)的文件。models.py文件用于編寫(xiě)模型對(duì)象,即數(shù)據(jù)庫(kù)表對(duì)應(yīng)的對(duì)象,以及表的增、刪、改、查的編寫(xiě)。mongo_conn.py文件用于編寫(xiě)MongoDB數(shù)據(jù)庫(kù)連接代碼。②rule文件夾用于存放定義的規(guī)則,key_words.py文件用于編寫(xiě)關(guān)鍵詞庫(kù)的集合。③server文件夾用于編寫(xiě)操作MySQL數(shù)據(jù)庫(kù)的邏輯業(yè)務(wù)。getinputinfo..py文件用于讀取從控制臺(tái)輸入的參數(shù)值。info_search.py文件用于編寫(xiě)數(shù)據(jù)爬取代碼,以及將爬取數(shù)據(jù)處理后保存到數(shù)據(jù)庫(kù)的邏輯。word_count.py文件用于編寫(xiě)詞頻統(tǒng)計(jì)和生成圖表邏輯。3.分詞與詞頻統(tǒng)計(jì)實(shí)戰(zhàn)④mongo_server文件夾用于編寫(xiě)操作MongoDB數(shù)據(jù)庫(kù)的邏輯業(yè)務(wù)。get_input_info.py文件用于讀取從控制臺(tái)輸入的參數(shù)值。mongo_info_search.py文件用于編寫(xiě)數(shù)據(jù)爬取代碼,以及將爬取數(shù)據(jù)處理后保存到數(shù)據(jù)庫(kù)的邏輯。mongo_wordcount..py文件用于編寫(xiě)詞頻統(tǒng)計(jì)和生成圖表邏輯。⑤static文件夾用于存放靜態(tài)HTML文件。mongo_rum.py文件為使用非關(guān)系型數(shù)據(jù)庫(kù)進(jìn)行操作的項(xiàng)目入口。⑦run.py文件為使用關(guān)系型數(shù)據(jù)庫(kù)進(jìn)行操作的項(xiàng)目入口。其完整代碼將在9.4節(jié)展示,下面對(duì)其邏輯進(jìn)行講解,并以代碼輔助。3.分詞與詞頻統(tǒng)計(jì)實(shí)戰(zhàn)3.2根據(jù)前面的整體結(jié)構(gòu)設(shè)計(jì),數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)代碼編寫(xiě)在models.py文件中,定義了NLPAnalysis類(lèi),類(lèi)中定義tablename的值為nlpanalysis,即表名為nlp_analysis。再定義4個(gè)字段,命名分別為id(主鍵,Integer類(lèi)型)、questiontitle(問(wèn)題標(biāo)題,String,長(zhǎng)度為200)、question_answer(問(wèn)題答案,String,長(zhǎng)度為500)和fenciresult(標(biāo)題分詞結(jié)果,String,長(zhǎng)度為1000)。代碼實(shí)現(xiàn)如下(models.py):數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)3.分詞與詞頻統(tǒng)計(jì)實(shí)戰(zhàn)若使用MongoDB,不需要設(shè)計(jì)數(shù)據(jù)結(jié)果,但需要獲取數(shù)據(jù)庫(kù)和集合的連接。封裝數(shù)據(jù)庫(kù)、集合獲取代碼示例如下(mongo_conn.py):3.分詞與詞頻統(tǒng)計(jì)實(shí)戰(zhàn)3.3根據(jù)從getinputinfo.py文件中獲取的輸入?yún)?shù),去指定網(wǎng)站根據(jù)指定關(guān)鍵字進(jìn)行數(shù)據(jù)爬取。數(shù)據(jù)爬取的關(guān)鍵點(diǎn)如下。分析網(wǎng)頁(yè),分析需要用GET請(qǐng)求還是POST請(qǐng)求,如/。經(jīng)分析,要使用的是GET請(qǐng)求(此處不做具體爬蟲(chóng)方法的介紹,可自行查詢資料解決,如在瀏覽器搜索:查看HTTP請(qǐng)求詳情,會(huì)顯示很多答案)。接著,分析請(qǐng)求頭的構(gòu)造形式,再分析進(jìn)行關(guān)鍵字搜索時(shí),參數(shù)的構(gòu)造形式是怎樣的,關(guān)鍵字怎樣放入U(xiǎn)RL請(qǐng)求中,定位到某一頁(yè)的請(qǐng)求參數(shù)是怎樣的,由此構(gòu)造一個(gè)通用的字符串參數(shù)。最后,分析問(wèn)題標(biāo)題和問(wèn)題答案所對(duì)應(yīng)的是哪些標(biāo)簽的內(nèi)容。這部分邏輯代碼實(shí)現(xiàn)如下,定義get_data_from_web方法(info_search.py):數(shù)據(jù)的爬取與保存3.分詞與詞頻統(tǒng)計(jì)實(shí)戰(zhàn)3.分詞與詞頻統(tǒng)計(jì)實(shí)戰(zhàn)其中,get_detail_info()方法實(shí)現(xiàn)如下:Jie_ba_fen_ci()方法實(shí)現(xiàn)如下:3.分詞與詞頻統(tǒng)計(jì)實(shí)戰(zhàn)問(wèn)題標(biāo)題、問(wèn)題答案和分詞結(jié)果取得后,接下來(lái)需要把這些獲取的信息保存到數(shù)據(jù)庫(kù)中。保存數(shù)據(jù)時(shí),將需要保存的數(shù)據(jù)以一個(gè)對(duì)象的形式傳遞給模型,在get_data_from_web()方法中需要加入以下代碼:同時(shí),需要在models.py中添加以下方法:3.分詞與詞頻統(tǒng)計(jì)實(shí)戰(zhàn)至此實(shí)現(xiàn)了數(shù)據(jù)的爬取和數(shù)據(jù)的持久化,完整代碼可在9.4節(jié)中查看。若使用MongoDB作為數(shù)據(jù)庫(kù),則只需將get_data_from_web()方法中的代碼:改為:并導(dǎo)入數(shù)據(jù)庫(kù),連接獲取模塊即可。3.分詞與詞頻統(tǒng)計(jì)實(shí)戰(zhàn)3.4爬取數(shù)據(jù)后,需要分析哪些關(guān)鍵詞對(duì)于詞頻分析是有用的,哪些是無(wú)用的,有用的保留,無(wú)用的則過(guò)濾。下面是一個(gè)簡(jiǎn)單的關(guān)鍵詞搜集示例,這些可以視為有用的關(guān)鍵詞,代碼如下(key_words.py):制定關(guān)鍵詞庫(kù)3.分詞與詞頻統(tǒng)計(jì)實(shí)戰(zhàn)3.5有了數(shù)據(jù)和關(guān)鍵詞比對(duì)規(guī)則后,接下來(lái)要做的是從數(shù)據(jù)庫(kù)取出數(shù)據(jù),根據(jù)過(guò)濾規(guī)則過(guò)濾后,統(tǒng)計(jì)滿足規(guī)則的各詞的出現(xiàn)次數(shù)。定義word_counto方法,代碼如下(word_count.py):詞頻統(tǒng)計(jì)與圖表生成3.分詞與詞頻統(tǒng)計(jì)實(shí)戰(zhàn)query_.from_mysql()的實(shí)現(xiàn)如下:若使用MongoDB,則query._from_mysq1()的實(shí)現(xiàn)示例如下:在models.py文件中需要添加如下方法:3.分詞與詞頻統(tǒng)計(jì)實(shí)戰(zhàn)統(tǒng)計(jì)工作完成后,最后需要根據(jù)統(tǒng)計(jì)結(jié)果繪制圖表。以繪制水平圖表為例,實(shí)現(xiàn)代碼如下:在word_count()方法的最后需要調(diào)用該方法,以達(dá)到統(tǒng)計(jì)結(jié)束后就繪制統(tǒng)計(jì)圖的效果。完整代碼見(jiàn)9.4節(jié)。3.分詞與詞頻統(tǒng)計(jì)實(shí)戰(zhàn)4分詞和詞頻統(tǒng)計(jì)的完整代碼4.分詞和詞頻統(tǒng)計(jì)的完整代碼程序入口代碼如下(run.py):4.1MySQL操作處理的完整代碼根路徑配置代碼如下(config.py):模型實(shí)現(xiàn)代碼如下(models.py):4.分詞和詞頻統(tǒng)計(jì)的完整代碼取得輸入?yún)?shù)實(shí)現(xiàn)代碼如下(get_input_info.py):4.分詞和詞頻統(tǒng)計(jì)的完整代碼4.分詞和詞頻統(tǒng)計(jì)的完整代碼從網(wǎng)站取得數(shù)據(jù)并存儲(chǔ)到數(shù)據(jù)庫(kù)的實(shí)現(xiàn)代碼如下(info_search.py):4.分詞和詞頻統(tǒng)計(jì)的完整代碼4.分詞和詞頻統(tǒng)計(jì)的完整代碼有效關(guān)鍵詞實(shí)現(xiàn)代碼如下(key_words.py):詞頻統(tǒng)計(jì)并生成統(tǒng)計(jì)圖,為了更直觀地查看統(tǒng)計(jì)圖效果,本例中生成3種統(tǒng)計(jì)圖:水平圖表、餅圖、詞云圖。代碼實(shí)現(xiàn)如下(word_count.py):4.分詞和詞頻統(tǒng)計(jì)的完整代碼4.分詞和詞頻統(tǒng)計(jì)的完整代碼執(zhí)行unpy文件,從控制臺(tái)輸入如下信息:輸入信息后,控制臺(tái)打印出如下信息:4.分詞和詞頻統(tǒng)計(jì)的完整代碼在static文件夾下將生成如圖9-2所示的靜態(tài)HTML文件。用Chrom瀏覽器打開(kāi)bar_horizontal.html文件,得到如圖9-3所示的水平圖表。用Chrom瀏覽器打開(kāi)pie.html文件,得到如圖9-4所示的餅圖統(tǒng)計(jì)圖。4.分詞和詞頻統(tǒng)計(jì)的完整代碼用Chrom瀏覽器打開(kāi)wordcloud.html文件,得到如圖9-5所示的詞云圖統(tǒng)計(jì)圖。至此完成了分詞和生成統(tǒng)計(jì)圖的功能。在該項(xiàng)目中也可以生成更多其他形式的統(tǒng)計(jì)圖,也可以將該項(xiàng)目擴(kuò)展為功能更加強(qiáng)大的項(xiàng)目,可以寫(xiě)入CSV文件和發(fā)送郵件,加入提醒相關(guān)人員對(duì)應(yīng)的信息的功能。4.分詞和詞頻統(tǒng)計(jì)的完整代碼程序入口實(shí)現(xiàn)示例代碼如下(mongo_run.py):4.2MongoDB操作處理的完整代碼實(shí)現(xiàn)碼4.分詞和詞頻統(tǒng)計(jì)的完整代碼接下來(lái)的PY文件與關(guān)系型數(shù)據(jù)庫(kù)中對(duì)應(yīng)PY文件的差別不大,此處不具體提供示例代碼,只提供示例代碼文件名,讀者可以從Github上clone。取得MongoDB數(shù)據(jù)庫(kù)連接的示例代碼見(jiàn)mongo_conn.py.取得輸入?yún)?shù)的示例代碼見(jiàn)mongo_server/get_input_info.py.取得數(shù)據(jù)并存儲(chǔ)到MongoDB數(shù)據(jù)庫(kù)的示例代碼mongo_server/mongo_info_search.py.詞頻統(tǒng)計(jì)并生成

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論