基于Python的網(wǎng)絡(luò)爬蟲設(shè)計與實現(xiàn)_第1頁
基于Python的網(wǎng)絡(luò)爬蟲設(shè)計與實現(xiàn)_第2頁
基于Python的網(wǎng)絡(luò)爬蟲設(shè)計與實現(xiàn)_第3頁
基于Python的網(wǎng)絡(luò)爬蟲設(shè)計與實現(xiàn)_第4頁
基于Python的網(wǎng)絡(luò)爬蟲設(shè)計與實現(xiàn)_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

)詞頻表示詞語在文檔中相對于語料庫所有文件的出現(xiàn)概率,該詞在文檔中出現(xiàn)次數(shù)越高,值就越大;逆文檔頻率則用另一種形式表示相反的情況,反應(yīng)包含詞語的文檔相對于語料庫所有文檔出現(xiàn)的逆概率,包含該詞的文檔出現(xiàn)的次數(shù)越多,逆文檔頻率值越低。某詞語在某特定文件內(nèi)的高詞頻,以及其在整個文件集合中的低逆文檔頻率,可以得出較高的值。基于指標(biāo)可以過濾掉語料庫文檔中普遍出現(xiàn)的詞語,保留在某些文檔中出現(xiàn)頻次較高的具有豐富分類特性的重要詞語(后文簡稱特征詞)。2.4詞云圖生成在現(xiàn)在互聯(lián)網(wǎng)信息時代,我們能在各種手機app或計算機網(wǎng)頁上看見各式各樣的詞云圖,詞云圖可以幫助我們從龐大且雜亂的信息中提取出現(xiàn)概率最高的詞,讓使用者更加清楚且直觀的看到有效信息。詞云庫把詞云當(dāng)作一個對象,WordCloud()是一個文本中與其相對的詞云。本設(shè)計依據(jù)詞語出現(xiàn)頻率高低的來繪制圖片,同時設(shè)定詞云圖的大小、樣式、顏色等。wordcloud=WordCloud("simhei.ttf",)fontpath='simhei.ttf'#字體aimask=np.array(Image.open("wordpic.png"))#導(dǎo)入圖像數(shù)據(jù)wc=WordCloud(font_path=fontpath,#設(shè)置字體路徑background_color="white",#背景顏色max_words=1000,#詞云顯示的最大詞數(shù)max_font_size=100,#字體最大值min_font_size=10,#字體最小值random_state=42,#隨機數(shù)collocations=False,#避免重復(fù)單詞max_words=200#要顯示的詞的最大個數(shù)mask=aimask,#造型遮蓋width=1200,height=800,margin=2,#圖像寬高,字間距,需要配合下面的plt.figure(dpi=xx)放縮才有效)word_frequence={x[0]:x[1]forxinwords_count.head(50).values}#words_count前50行數(shù)據(jù),即詞頻前50的詞匯word_cloud=wc.fit_words(word_frequence)#根據(jù)詞頻生成詞云plt.figure(dpi=50)#通過這里可以放大或縮小plt.axis("off")#隱藏坐標(biāo)plt.imshow(word_cloud)2.5數(shù)據(jù)管理pandas提供了大量能使我們快速便捷地處理數(shù)據(jù)的函數(shù)和方法。DataFrame是Python中Pandas庫中的一種數(shù)據(jù)結(jié)構(gòu),它類似excel,是一種二維表DataFrame函數(shù)是創(chuàng)建一個二維表,傳入?yún)?shù),是所存放的數(shù)據(jù)。2.6BeautifulSoupBeautifulSoup支持Python標(biāo)準(zhǔn)庫中的HTML解析器,還支持一些第三方的解析器。BeautifulSoup最主要的功能是從網(wǎng)頁抓取數(shù)據(jù)。soup=BeautifulSoup(article_doc,'html.parser')利用BeautifulSoup模塊的find_all()函數(shù)搜索新聞信息。將相關(guān)信息按指定順序存入文本文件。soup=BeautifulSoup(list_page,'html.parser')#利用BeautifulSoup模塊利用標(biāo)簽a的兩個屬性(href和class)找該對應(yīng)的鏈接條件

第3章基于Python的校園網(wǎng)新聞信息獲取與分析依照用戶設(shè)定的規(guī)則獲取互聯(lián)網(wǎng)網(wǎng)頁中的文字,圖片或者一切內(nèi)容的一組程序或腳本就是網(wǎng)絡(luò)爬蟲,網(wǎng)絡(luò)爬蟲的重要作用簡單來說就是讓互聯(lián)網(wǎng)網(wǎng)頁的內(nèi)容下載到本地從而本地有了一個鏡像備份。時至今日互聯(lián)網(wǎng)爆炸的時代,幾乎所有網(wǎng)頁都會提供給互聯(lián)網(wǎng)網(wǎng)民們大量的信息,但是這些龐大的數(shù)據(jù)中大部分都是用戶不需要的,就算是專門搜索或者在相關(guān)的主題網(wǎng)頁中,想要找到用戶心儀的信息也是十分困難的。在龐大的數(shù)據(jù)下需要互聯(lián)網(wǎng)用戶一個一個去鑒別,這是十分費心費力的一件事。所以,就可以專門設(shè)計一個符合用戶需求主題的爬蟲進行精準(zhǔn)搜索,方便快捷地獲取用戶需要的數(shù)據(jù)。主題網(wǎng)絡(luò)爬蟲就完美的符合用戶需要。高網(wǎng)速大數(shù)據(jù)的今天,主題網(wǎng)絡(luò)爬蟲在Web應(yīng)用中的地位將越發(fā)重要甚至是不可代替。網(wǎng)絡(luò)爬蟲第一步選擇爬取對象的鏈接地址(即URL),將URL放置在待爬取的隊列里;第二步從待抓取URL隊列里讀取一條URL接著進行DNS解析,下載網(wǎng)頁內(nèi)容;第三步分析網(wǎng)頁內(nèi)容,從中搜索符合特定要求的數(shù)據(jù),并按指定格式保存;第四步對數(shù)據(jù)進行分析處理。圖1本章網(wǎng)絡(luò)爬蟲和數(shù)據(jù)處理流程本章首先利用利用網(wǎng)絡(luò)爬蟲技術(shù)從我校校園網(wǎng)的校園新聞和綜合新聞兩個版塊下載、搜索新聞;然后對新聞進行分詞處理,分析其中新聞高頻詞。編程中用到ThreadPool模塊、requests模塊、BeautifulSou模塊、DataFrame模塊、WordCloud模塊以及Python的內(nèi)置os模塊、re模塊、pandas模塊和numpy模塊。3.1基于Python的校園網(wǎng)新聞信息爬蟲實現(xiàn)利用網(wǎng)絡(luò)爬蟲技術(shù)從我校校園網(wǎng)的校園新聞(網(wǎng)址:'/CampusNews/list')和綜合新聞(網(wǎng)址:'/news/GeneralNews/list_SubjectId_15')兩個主頁下載相關(guān)新聞網(wǎng)址鏈接表。利用request模塊從每個新聞鏈接中下載新聞并按指定格式保存到文件中。圖2是以校園新聞版塊為例的信息爬取流程圖。綜合新聞版塊新聞爬取方式相同。設(shè)計中利用ThreadPool模塊將兩個版塊主頁網(wǎng)址輸入ThreadPool對象的map函數(shù),由系統(tǒng)并行搜索兩個版塊的新聞信息。代碼如下:#兩個新聞版塊爬取鏈接FILE_CONFIGS=[['/CampusNews/list','xyxw','news/xyxw/'],['/news/GeneralNews/list_SubjectId_15','zhxw','news/zhxw/'],]pool=ThreadPool()pool.map(main,FILE_CONFIGS)pool.close()#關(guān)閉進程池(pool),使其不再接受新的任務(wù)pool.join()#主進程阻塞等待子進程的退出,join方法要在close或terminate之后使用圖2校園新聞版塊信息爬取流程圖根據(jù)流程,編寫主函數(shù)main()程序。偌max_file=300 #最大文件數(shù)#requests請求頭HEADERS={'accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8','accept-encoding':'gzip,deflate,br','accept-language':'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7','Connection':'close','User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit''/537.36(KHTML,likeGecko)Chrome/71.0.3578.98Safari/537.36'#爬蟲瀏覽器}CODE='UTF-8' #全局默認(rèn)編碼defmain(config):url=config[0] #信息鏈接地址URLfile_name=config[1] #文件名dir_path=config[2] #文件夾file_num=0mkdir(dir_path) #創(chuàng)建文件夾doc=get_html(url+'.html') #獲取每類別的網(wǎng)址網(wǎng)頁內(nèi)容ifdoc!='':total_page=get_total_page(doc) #當(dāng)前網(wǎng)頁總編號foriinrange(total_page): #遍歷所有頁page=i+1list_page_url=url+'_page_{page}.html'.format(page=page)#獲取該類其中一頁的鏈接list_doc=get_html(list_page_url)#獲取該類其中一頁的頁面信息iflist_doc!='':iffile_name=='xyxw':ftype=1;#校園新聞else:ftype=2;#綜合新聞article_urls=get_article_urls(list_doc,ftype)#提取該類其中一頁中各個鏈接forarticle_urlinarticle_urls:article_doc=get_html(article_url)#提取每類每個頁面中的信息ifarticle_doc!='': #將爬取信息中特定信息存入文件中file_path=dir_path+file_name+str(file_num)+'.txt'flag=save_article(article_doc,article_url,file_path)#按指定格式存入文件ifflag:file_num+=1print('保存%s類第%d個文件'%(file_name,file_num))iffile_num>max_file:#每類信息最多保存500個文件breakiffile_num>max_file:break本設(shè)計實現(xiàn)爬取的關(guān)鍵程序流程圖如圖3圖33.1.1網(wǎng)頁信息獲取利用reqests模塊獲取指定網(wǎng)址URL的頁面信息。設(shè)置了最大重試次數(shù)為3次,如果3次請求目標(biāo)URL都失敗則拋出異常。對于請求返回的狀態(tài)碼為200的響應(yīng),將以字符串的形式返回請求到的頁面HTML代碼。具體代碼如下:defget_html(url):doc=''try:session=requests.session()#開啟會話,可以跨請求保持某些參數(shù)session.mount('https://',HTTPAdapter(max_retries=3))request=requests.get(url=url,headers=HEADERS,timeout=30)#根據(jù)網(wǎng)址和HEADERS請求session.close()#關(guān)閉會話request.close()#關(guān)閉請求ifrequest.status_code==200:request.encoding="utf-8"doc=request.textexceptRequestExceptionase:print('無法獲取文件信息')returndoc圖4網(wǎng)頁信息獲取流程圖3.1.2版塊新聞鏈接列表搜索利用BeautifulSoup模塊和re模塊從校園新聞和綜合新聞兩個版塊主頁中獲取總頁數(shù)和各自的子網(wǎng)頁鏈接地址列表。每個版塊總頁數(shù)只需要用re模塊的findall()函數(shù),找到其中匹配的參數(shù)即可。代碼如下:defget_total_page(doc):#從doc字符串中提取出頁碼和總頁數(shù)regex='共有<b>(\d*?)</b>頁'result=re.findall(regex,doc,re.DOTALL)[0]#尋找匹配括號里(.*?)和(\d*?)的內(nèi)容total_page=int(result)#總頁數(shù)returntotal_page版塊子網(wǎng)頁鏈接地址列表用BeautifulSoup模塊的find_all()函數(shù),利用標(biāo)簽a的兩個屬性(href和class)找該對應(yīng)條件的鏈接地址。具體代碼如下:defget_article_urls(list_page,ftype):#獲取鏈接地址列表ifftype==1:#校園新聞base_url=''else:#綜合新聞base_url='/news'soup=BeautifulSoup(list_page,'html.parser')#利用BeautifulSoup模塊#利用標(biāo)簽a的兩個屬性(href和class)找該對應(yīng)的鏈接條件ifftype==1:#校園新聞urls_tree=soup.find_all('a',href=pile('/CampusNews/'),class_='dot')else:#綜合新聞urls_tree=soup.find_all('a',href=pile('/GeneralNews/'),class_='dot')article_urls=[]forurlinurls_tree:url=url.get('href')ifurl.startswith('http'): #以http開頭的字符串(即鏈接地址)article_urls.append(url) #追加鏈接地址else:article_urls.append(base_url+url) #不以http開頭的字符串,則基地址+鏈接returnarticle_urls

圖5地址鏈接流程圖3.1.3版塊新聞網(wǎng)頁新聞內(nèi)容獲取用re模塊的findall()函數(shù)搜索新聞標(biāo)題和發(fā)布日期,利用BeautifulSoup模塊的find_all()函數(shù)搜索新聞信息。將相關(guān)信息按指定順序存入文本文件。具體代碼如下:defsave_article(article_doc,article_url,file_path):try:regex='<h1>(.*?)</h1>'title=re.findall(regex,article_doc,re.DOTALL)[0] #尋找h1標(biāo)簽的內(nèi)容,即文章的標(biāo)題regexd='<p><span>發(fā)布日期:(.*?)</span></p>'datas=re.findall(regexd,article_doc,re.DOTALL)[0] #尋找日期soup=BeautifulSoup(article_doc,'html.parser')#利用BeautifulSoup模塊elements=soup.find_all('p',style=pile('text-indent:2em;'))#找新聞信息content=''iflen(elements)>0:forelementinelements:#遍歷element=str(element.text)#獲取每一簇信息para=del_space(element)#自定義的刪除空格函數(shù),在后面content+=parawithopen(file_path,'w',encoding=CODE)asf:#按指定順序?qū)懭胛募.write(datas+'\n')#首段:發(fā)布日期f.write(title+'\n')#第二段:信息頭f.write(content+'\n')#第三段:信息主題f.writelines(article_url)#最后一段:信息的鏈接地址returnTrueexceptIndexError:print('無法保存文件')returnFalsedefdel_space(string):#去除中文之間的空格保留英文之間的空格 string=string.strip()#移除字符串頭尾指定的字符(默認(rèn)為空格或換行符)或字符序列 pattern=pile(r'([\u4e00-\u9fa5]+)\s+([\u4e00-\u9fa5]+)\s+')#'\s'用于匹配空白字符 string=pattern.sub(r'\1\2',string) returnstring圖6獲取新聞流程圖3.2基于Python的校園網(wǎng)新聞信息分析實現(xiàn)針對3.1節(jié)利用網(wǎng)絡(luò)爬蟲技術(shù)獲取的校園新聞和綜合新聞兩個版塊的相關(guān)新聞信息文件,將新聞文字進行數(shù)據(jù)管理、分詞、停用詞刪除、統(tǒng)計和制作詞云等操作(如圖3所示)。圖7校園新聞版塊信息分析流程圖3.2.1新聞信息數(shù)據(jù)管理校園新聞和綜合新聞兩個版塊所在文件夾內(nèi)的所有文本文件數(shù)據(jù)進行收集處理,按類別、標(biāo)題、日期和內(nèi)容進行管理。先將字符串生成字典,再將文件存為DataFrame格式。具體代碼如下:deftext_processing(folder_path):folder_list=os.listdir(folder_path)#查看folder_path的子文件夾forfolderinfolder_list: #遍歷每個子文件夾new_folder_path=os.path.join(folder_path,folder) #根據(jù)子文件夾,生成新的路徑files=os.listdir(new_folder_path) #放子文件夾下的txt文件的列表kind=''iffolder=='xyxw':kind='校園新聞'else:kind='綜合新聞'forfileinfiles: #讀取合并文章數(shù)據(jù)path=os.path.join(new_folder_path,file)data=[kind]withopen(path,mode='r',encoding=CODE)asf:forlineinf:#讀取每一段,順序?qū)⑴cDataFrame列名對應(yīng)data.append(line.strip())data_dict=dict(zip(COLUMNS,data))#用zip()函數(shù)根據(jù)鍵字進行排序df_news=DataFrame(data_dict,index=[0])#DataFrame類的方法,將鍵字作為列名df_news.to_csv('news_docu.txt',index=False,header=False,mode='a+',encoding=CODE)#讀取出文件中的數(shù)據(jù),以COLUMNS,為列名df_docs=pd.read_csv('news_docu.txt',names=COLUMNS,encoding=CODE)#數(shù)據(jù)清洗:如果某條數(shù)據(jù)有缺失值(na數(shù)據(jù))直接刪除整條數(shù)據(jù)df_docs=df_docs.dropna()returndf_docs

圖8數(shù)據(jù)管理流程圖3.2.2新聞內(nèi)容文本分詞新聞內(nèi)容處理的基礎(chǔ)是“詞”,這些“詞”必須有實際意義的寫。利用開源的分詞器——jieba分詞器對新聞內(nèi)容分詞。jieba支持基于TF-IDF算法選擇關(guān)鍵詞。利用jieba分詞器對3.2.1得到的數(shù)據(jù)‘content’列進行分詞。代碼如下:defsplit_word(df_docs):content=df_docs['content'].values.tolist()#jieba分詞需要list格式content_s=[]forlineincontent:current_segment=jieba.lcut(line)#分詞,返回列表iflen(current_segment)>1andcurrent_segment!='\n':#換行符content_s.append(current_segment)#追加returncontent_s 圖9分詞流程圖3.2.3停用詞刪除對3.2.3得到的分詞進行過渡,將其中“停用詞”刪除。利用已有的停用詞表刪除分詞中的停用詞,保留有效的有實際意義的詞。代碼如下:defdrop_stopwords(content_s):stopwords=pd.read_csv("./files/stopwords.txt",index_col=False,sep="\t",quoting=3,names=['stopword'],encoding='utf-8')stopwords=stopwords.stopword.values.tolist()#轉(zhuǎn)換為list類型contents_drop=[]#記錄去除停用詞后出現(xiàn)的詞all_words=[]forlineincontent_s:line_clean=[]forwordinline:ifwordinstopwords:#判斷是停用詞則不追加continueline_clean.append(word)#判斷不是停用詞,則追加all_words.append(str(word))#判斷不是停用詞,則以字符串形式追加,用于詞云contents_drop.append(line_clean)#追加該行“有效詞”make_wordcloud(all_words)#制作詞云圖returncontents_drop

圖10停用詞流程圖3.2.4高頻詞詞云制作針對3.2.2得到的新聞信息中的分詞,利用DataFrame類型數(shù)據(jù)的padas方法進行分析統(tǒng)計,再利用開源庫WordCloud繪制50個高頻詞詞云圖。具體代碼如下:defmake_wordcloud(all_words):cy_num=50#詞圖中的最高頻的詞條數(shù)df_all_words=pd.DataFrame({'all_words':all_words})#由列表生成DataFrame數(shù)據(jù)#先分組all_words,再分類統(tǒng)計計數(shù)size,通過分組計數(shù),統(tǒng)計每個詞出現(xiàn)的次數(shù)words_count=df_all_words.groupby(by=['all_words'])['all_words'].agg(numpy.size)words_count=words_count.to_frame() #每個詞的詞頻轉(zhuǎn)換為DataFrame類型,列名為all_wordswords_count.columns=['count'] #將每個詞的詞頻數(shù)據(jù)words_count列名換為count#以count列降序排列words_count=words_count.reset_index().sort_values(by=["count"],ascending=False)#設(shè)置詞云圖片參數(shù),生成詞云對象wordcloud=WordCloud(font_path="./files/simhei.ttf",background_color="white",max_font_size=80)word_frequence={x[0]:x[1]forxinwords_count.head(cy_num).values}wordcloud=wordcloud.fit_words(word_frequence)#根據(jù)詞頻生成詞云圖數(shù)據(jù)wordcloud.to_file('wordcloud_songtian.png')#生成詞云圖print('\n根據(jù)新聞中詞頻最高的{num}個詞制作的詞云圖:'.format(num=cy_num))plt.imshow(wordcloud)plt.axis("off")plt.show()圖11校園新聞信息高頻詞詞云圖從圖4中可以看出“工作”、“學(xué)院”、“松田”、“學(xué)生”、“教育”等詞在近期的新聞信息中出現(xiàn)頻率極高。3.2.4新聞內(nèi)容詞語分析針對某一新聞頁面內(nèi)的有效新聞信息進行分析,利用jieba.analyse.extract_tags方法基于TF-IDF算法從中選取指定數(shù)量的關(guān)鍵詞。具體代碼如下:defword_seq(df_docs,contents_drop,index):c_num=5#高頻print('以下是第{index}號記錄的內(nèi)容及其高頻詞\n'.format(index=index))print(df_docs['content'].values.tolist()[index])#index記錄號的內(nèi)容print('\n網(wǎng)址:'+df_docs['url'].values.tolist()[index])#index記錄號的網(wǎng)址content_s_str="".join(contents_drop[index])#index記錄號的內(nèi)容分詞#利用jieba第三方庫提取#index記錄號內(nèi)容的分詞,顯示前topK=c_num個print('\n以下是第{index}號記錄的內(nèi)容中詞頻最高的{c_num}的詞:'.format(index=index,c_num=c_num))print("".join(jieba.analyse.extract_tags(content_s_str,topK=c_num,withWeight=False)))程序運行結(jié)果圖如圖12:圖12第4章基于Python的新型冠狀病毒疫情爬蟲實現(xiàn)針對今年對我國發(fā)生的新型冠狀病毒肺炎疫情,利用動態(tài)網(wǎng)頁獲取方法從騰訊的新聞網(wǎng)站()下載疫情數(shù)據(jù),將數(shù)據(jù)歸類統(tǒng)計,并繪制疫情數(shù)據(jù)曲線圖。為導(dǎo)入疫情數(shù)據(jù),對數(shù)據(jù)進行分析和圖形繪制,先導(dǎo)入requests、json、time、datetime、pandas、matplotlib.pyplot和matplotlib.dates模塊包。新型冠狀肺炎病毒疫情數(shù)據(jù)爬取目標(biāo)網(wǎng)站是騰訊新聞,該網(wǎng)站提供疫情實時追蹤數(shù)據(jù)。4.1每日疫情數(shù)據(jù)獲取及曲線圖繪制如圖6所示,先request.get()方法從騰訊新聞公布疫情新聞數(shù)據(jù)所在的網(wǎng)址url='/g2/getOnsInfo?name=wuwei_ww_cn_day_counts&callback=&_=%d'%int(time.time()*1000)中爬取數(shù)據(jù);再利用json.loads()方法將數(shù)據(jù)轉(zhuǎn)換為易于操作的字典類型;然后利用pd.DataFrame()方法將爬取來的數(shù)據(jù)形成每日疫情二維數(shù)據(jù)。圖13每日疫情數(shù)據(jù)爬取流程4.1.1每日疫情數(shù)據(jù)爬取程序現(xiàn)實根據(jù)每日疫情數(shù)據(jù)爬取流程圖,導(dǎo)入requests、json、time、datetime和pandas模塊包,編寫程序如下:url='/g2/getOnsInfo?name=wuwei_ww_cn_day_counts&callback=&_=%d'%int(time.time()*1000) #數(shù)據(jù)動態(tài)網(wǎng)址data=json.loads(requests.get(url=url).json()['data']) #爬取的數(shù)據(jù)data.sort(key=lambdax:x['date']) #以鍵字date升序排列data_day=pd.DataFrame(columns=['日期','確診數(shù)','疑似數(shù)','治愈數(shù)','死亡數(shù)'])#創(chuàng)建數(shù)據(jù)二維表,指定列名loc=0#初始化變量date_list=list()#日期confirm_list=list()#確診suspect_list=list()#疑似dead_list=list()#死亡heal_list=list()#治愈foritemindata:loc+=1month,day=item['date'].split('/')#獲取月和日期rq=datetime.strptime('2020-%s-%s'%(month,day),'%Y-%m-%d')#獲取日期qz=int(item['confirm'])#確認(rèn)數(shù)ys=int(item['suspect'])#疑似數(shù)zy=int(item['heal'])#治愈數(shù)sw=int(item['dead'])#死亡數(shù)date_list.append(rq)confirm_list.append(qz)suspect_list.append(ys)dead_list.append(sw)heal_list.append(zy)data_day.loc[loc]=[rq,qz,ys,zy,sw]#將數(shù)據(jù)為一行運行程序得到date_list、confirm_list、suspect_list、dead_list、heal_list和data_day數(shù)據(jù)。下面圖14是運行結(jié)果:圖144.1.2每日疫情數(shù)據(jù)曲線圖繪制程序現(xiàn)實基于4.1.1程序爬取的數(shù)據(jù)包,導(dǎo)入matplotlib.pyplot和matplotlib.dates模塊包,編寫每日疫情數(shù)據(jù)曲線圖繪制程序如下:plt.figure('2020-每日疫情統(tǒng)計圖表',facecolor='#f4f4f4',figsize=(10,8)) #前景,圖尺寸plt.title('2020-每日疫情曲線',fontsize=20) #圖標(biāo)題plt.plot(date_list,confirm_list,label='確診數(shù)') #繪制確診數(shù)plt.plot(date_list,suspect_list,label='疑似數(shù)')plt.plot(date_list,heal_list,label='治愈數(shù)')plt.plot(date_list,dead_list,label='死亡數(shù)')plt.rcParams['xtick.direction']='in' #把刻度線設(shè)置在圖的里面plt.xticks(date_list,date_list,color='black',rotation=90,size=10) #橫軸內(nèi)容plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%m-%d'))#橫軸格式plt.grid(linestyle=':') #顯示網(wǎng)格plt.legend(loc='best') #顯示圖例plt.savefig('2020-每日疫情曲線.png') #保存為文件圖15繪制流程圖運行上述程序,得到如圖16的2020-每日疫情曲線圖。圖16每日疫情曲線圖橫縱坐標(biāo)分為'日期',縱坐標(biāo)為患者數(shù)量('確診數(shù)','疑似數(shù)','治愈數(shù)','死亡數(shù)')。由蘭色曲線可知從3月份全國確診數(shù)上升很慢;2月到4月綠色治愈數(shù)曲線上升很快;紅色死亡數(shù)曲線在確診數(shù)上升期延后10上升較快,后趨于平穩(wěn),表明醫(yī)療技術(shù)的作用顯現(xiàn);黃色疑似數(shù)曲線在3月份是高峰,隨之下降。從圖中看出從一月二十四至二十五號開始,確診數(shù)和疑似數(shù)開始猛增。二月八號開始疑似數(shù)開始明顯下降,治愈數(shù)顯著升高。可見一月二十四號至二月八號是抗戰(zhàn)疫情最為激烈的時期,二月二十九號開始確診數(shù)開始明顯降低,說明疫情逐漸得到控制,專家們所說的拐點即將到來。從圖表中我們也可看出至四月份死亡數(shù)沒有明顯增長,代表著抗擊疫情一線的英雄們的成果和偉大。從曲線圖可知,未來幾日全國治愈數(shù)將接近確診數(shù)。4.2各地疫情數(shù)據(jù)獲取及曲線圖繪制如圖17所示,先request.get()方法從騰訊新聞公布疫情新聞數(shù)據(jù)所在的網(wǎng)址url='/g2/getOnsInfo?name=disease_h5&callback=&_=%d'%int(time.time()*1000)中爬取數(shù)據(jù);再利用json.loads()方法將數(shù)據(jù)轉(zhuǎn)換為易于操作的字典類型;然后利用pd.DataFrame()方法將爬取來的數(shù)據(jù)形成各地疫情二維數(shù)據(jù)。圖17各地疫情數(shù)據(jù)爬取流程4.2.1各地疫情數(shù)據(jù)爬取程序現(xiàn)實根據(jù)各地疫情數(shù)據(jù)爬取流程圖,導(dǎo)入requests、json、time、datetime和pandas模塊包,編寫程序如下:url='/g2/getOnsInfo?name=disease_h5&callback=&_=%d'%int(time.time()*1000)data_toal=json.loads(requests.get(url=url).json()['data'])data_area=data_toal['areaTree']#國內(nèi)各省市分布data_china_sf=pd.DataFrame(columns=['省份','確診數(shù)','疑似數(shù)','治愈數(shù)','死亡數(shù)'])data_china_ds=pd.DataFrame(columns=['地市','確診數(shù)','疑似數(shù)','治愈數(shù)','死亡數(shù)'])data_ch=data_area[0]['children']loc=0loc_ds=0foritemindata_ch:#省級統(tǒng)計loc+=1sf=item['name']qz=int(item['total']['confirm'])ys=int(item['total']['suspect'])zy=int(item['total']['heal'])sw=int(item['total']['dead'])data_china_sf.loc[loc]=[sf,qz,ys,zy,sw]#獲取各省份的數(shù)據(jù)#地市統(tǒng)計data_ds=item['children']foritem_dsindata_ds:sf=item_ds['name']ifsfnotin'地區(qū)待確認(rèn)':loc_ds+=1qz=int(item_ds['total']['confirm'])ys=int(item_ds['total']['suspect'])zy=int(item_ds['total']['heal'])sw=int(item_ds['total']['dead'])data_china_ds.loc[loc_ds]=[sf,qz,ys,zy,sw]#獲取各地市的數(shù)據(jù)運行程序得到data_china_sf和data_china_ds數(shù)據(jù)。運行結(jié)果如下圖18:圖184.2.2各地疫情當(dāng)前數(shù)據(jù)曲線圖繪制程序現(xiàn)實基于4.2.1程序爬取的當(dāng)日數(shù)據(jù)包,導(dǎo)入matplotlib.pyplot和matplotlib.dates模塊包,編寫每日疫情數(shù)據(jù)曲線圖繪制程序如下:plt.figure('2020-各省市疫情統(tǒng)計圖表',facecolor='#f4f4f4',figsize=(15,8))plt.title('2020-各省市疫情曲線',fontsize=30)xtk=list(data_china_sf.iloc[:,0])xz=list(range(len(xtk)))plt.plot(xz,data_china_sf.iloc[:,1],label='確診數(shù)')plt.plot(xz,data_china_sf.iloc[:,2],label='疑似數(shù)')plt.plot(xz,data_china_sf.iloc[:,3],label='治愈數(shù)')plt.plot(xz,data_china_sf.iloc[:,4],label='死亡數(shù)')plt.xticks(xz,xtk,color='black',rotation=90)plt.savefig('2020-各省市疫情曲線.png')#保存為文件#繪制各地市疫情統(tǒng)計圖plt.figure('2020-各地市疫情統(tǒng)計圖表',facecolor='#f4f4f4',figsize=(100,8))plt.title('2020-各地市疫情曲線',fontsize=20)xtk=list(data_china_ds.iloc[:,0])xz=list(range(len(xtk)))plt.plot(xz,data_china_ds.iloc[:,1],label='確診數(shù)')plt.plot(xz,data_china_ds.iloc[:,2],label='疑似數(shù)')plt.plot(xz,data_china_ds.iloc[:,3],label='治愈數(shù)')plt.plot(xz,data_china_ds.iloc[:,4],label='死亡數(shù)')plt.xticks(xz,xtk,color='black',rotation=90)plt.savefig('2020-各地市疫情曲線.png')#保存為文件運行上述程序,得到如圖19和圖20的2020-國內(nèi)當(dāng)日各省市疫情曲線圖和2020-國內(nèi)當(dāng)日各地市疫情曲線圖。圖192020-國內(nèi)當(dāng)日各省市疫情曲線圖由上圖抓取各省疫情圖可知,在舉國之力的努力下,經(jīng)過武漢和全國封禁后,我國疫情控制情況良好,沒有多點爆發(fā)的情況出現(xiàn)。圖202020-國內(nèi)當(dāng)日各地市疫情曲線圖從各地市當(dāng)日疫情曲線圖可看出,湖北武漢確實是疫情爆發(fā)的中心,封禁湖北武漢為無奈之舉,但確實是必行之法。

第5章總結(jié)本設(shè)計運用網(wǎng)絡(luò)爬蟲算法設(shè)計編寫了爬蟲系統(tǒng)程序,并爬取了廣州大學(xué)松田學(xué)院校園網(wǎng)()的校園新聞和綜合新聞兩個版塊的相關(guān)新聞信息文件和騰訊新聞網(wǎng)()的動態(tài)網(wǎng)頁獲取疫情數(shù)據(jù)信息,進行處理分類,將數(shù)據(jù)歸類統(tǒng)計分析,并繪制詞云圖和疫情數(shù)據(jù)曲線圖。從過程與結(jié)果來看,網(wǎng)絡(luò)爬蟲能夠改善互聯(lián)網(wǎng)用戶搜索信息的體驗與感官,減少不必要的信息攝入,節(jié)省上網(wǎng)搜索時間,高速提取互聯(lián)網(wǎng)中的有效信息,從而增加工作效率。

參考文獻[1]王蕾,安英博,劉佳杰.基于Python的互聯(lián)網(wǎng)金融數(shù)據(jù)采集[J].合作經(jīng)濟與科技,2017(9).[2]

舒暢,黎洪生.使用Python實現(xiàn)基于Web的水資源監(jiān)測系統(tǒng)[J].武漢理工大學(xué)學(xué)報(信息與管理工程版),2006,28(5):38-40.[3]

劉洪志.利用Python批量獲取互聯(lián)網(wǎng)中的桌面壁紙[J].電腦編程技巧與維護,2014(21).[4]

李培.基于Python的網(wǎng)絡(luò)爬蟲與反爬蟲技術(shù)研究[J].計算機與數(shù)字工程,2019(6).[5]

王芳,張睿,宮海瑞.基于Scrapy框架的分布式爬蟲設(shè)計與實現(xiàn)[J].信息技術(shù),2019(3).[6]

周海晨.基于爬蟲與文本挖掘的“985”高校圖書館微信公眾號的調(diào)研[D].安徽大學(xué),2017.[7]

魏冬梅,何忠秀,唐建梅.基于Python的Web信息獲取方法研究[J].軟件導(dǎo)刊,2018(1):41-43.[8]任迪,萬健,殷昱煜,等.基于貝葉斯分類的Web服務(wù)質(zhì)量預(yù)測方法研究[J].浙江大學(xué)學(xué)報(工學(xué)版),2017,51(6):1242-1251.[9]徐榮飛.Python正則表達(dá)式研究[J].電腦編程技巧與維護(9):47+51.[10]邱清盈,鄭國民,馮培恩,etal.基于正則表達(dá)式的專利信息提取方法研究[J].中國機械工程,2007,18(19):2326-2329.[11]NurulAfiqahMatZaib,NorErneNaziraBazin,NoorfaHaszlinnaMustaffa,等.Integrationofsystemdynamicswithbigdatausingpython:Anoverview[C]//20176thICTInternationalStudentProjectConference(ICT-ISPC).IEEE,2017.[12]JacobMcPadden,ThomasJSDurant,DustinRBunch,等.AScalableDataSciencePlatformforHealthcareandPrecisionMedicineResearch(Preprint)[J].JournalofMedicalInternetResearch,2018,21(4).致謝時光荏苒,大學(xué)四年的學(xué)習(xí)生活即將結(jié)束,四年間的回憶仿佛還在眼前,老師們的教誨與指引,輔導(dǎo)員們的幫助與開導(dǎo),同學(xué)的鼓勵與支持,父母的期望與贊許,這些都會讓我積極進步。大學(xué)四年時光我是快樂和充實的,自己很幸運能結(jié)識這么多的良師益友,希望祖國繁榮強大,師長們身體健康,同學(xué)們前程似錦,感謝自己人生路上的每一個人。

捷鍵與一些電腦小技巧HYPERLINKwinkey+d:

這是高手最常用的第一快捷組合鍵。這個快捷鍵組合可以將桌面上的所有窗口瞬間最小化,無論是聊天的窗口還是游戲的窗口……只要再次按下這個組合鍵,剛才的所有窗口都回來了,而且激活的也正是你最小化之前在使用的窗口!

--這個就是winkeywinkey+f:

不用再去移動鼠標(biāo)點“開始→搜索→文件和文件夾”了,在任何狀態(tài)下,只要一按winkey+f就會彈出搜索窗口。

winkey+r:

在我們的文章中,你經(jīng)常會看到這樣的操作提示:“點擊‘開始→運行’,打開‘運行’對話框……”。其實,還有一個更簡單的辦法,就是按winkey+r!

alt+tab:

如果打開的窗口太多,這個組合鍵就非常有用了,它可以在一個窗口中顯示當(dāng)前打開的所有窗口的名稱和圖標(biāo)●,選中自己希望要打開的窗口,松開這個組合鍵就可以了。而alt+tab+shift鍵則可以反向顯示當(dāng)前打開的窗口。

winkey+e:

當(dāng)你需要打開資源管理器找文件的時候,這個快捷鍵會讓你感覺非?!八保≡僖膊挥抿v出一只手去摸鼠標(biāo)了!

小提示:

winkey指的是鍵盤上刻有windows徽標(biāo)的鍵●。winkey主要出現(xiàn)在104鍵和107鍵的鍵盤中。104鍵盤又稱win95鍵盤,這種鍵盤在原來101鍵盤的左右兩邊、ctrl和alt鍵之間增加了兩個windwos鍵和一個屬性關(guān)聯(lián)鍵。107鍵盤又稱為win98鍵盤,比104鍵多了睡眠、喚醒、開機等電源管理鍵,這3個鍵大部分位于鍵盤的右上方。

再補充點

F1顯示當(dāng)前程序或者windows的幫助內(nèi)容。

F2當(dāng)你選中一個文件的話,這意味著“重命名”

F3當(dāng)你在桌面上的時候是打開“查找:所有文件”對話框

F10或ALT激活當(dāng)前程序的菜單欄

windows鍵或CTRL+ESC打開開始菜單

CTRL+ALT+DELETE在win9x中打開關(guān)閉程序?qū)υ捒?/p>

DELETE刪除被選擇的選擇項目,如果是文件,將被放入回收站

SHIFT+DELETE刪除被選擇的選擇項目,如果是文件,將被直接刪除而不是

放入回收站

CTRL+N新建一個新的文件

CTRL+O打開“打開文件”對話框

CTRL+P打開“打印”對話框

CTRL+S保存當(dāng)前操作的文件

CTRL+X剪切被選擇的項目到剪貼板

CTRL+INSERT或CTRL+C復(fù)制被選擇的項目到剪貼板

SHIFT+INSERT或CTRL+V粘貼剪貼板中的內(nèi)容到當(dāng)前位置

ALT+BACKSPACE或CTRL+Z撤銷上一步的操作

ALT+SHIFT+BACKSPACE重做上一步被撤銷的操作

Windows鍵+D:最小化或恢復(fù)windows窗口

Windows鍵+U:打開“輔助工具管理器”

Windows鍵+CTRL+M重新將恢復(fù)上一項操作前窗口的大小和位置

Windows鍵+E打開資源管理器

Windows鍵+F打開“查找:所有文件”對話框

Windows鍵+R打開“運行”對話框

Windows鍵+BREAK打開“系統(tǒng)屬性”對話框

Windows鍵+CTRL+F打開“查找:計算機”對話框

SHIFT+F10或鼠標(biāo)右擊打開當(dāng)前活動項目的快捷菜單

SHIFT在放入CD的時候按下不放,可以跳過自動播放CD。在打開wo

rd的時候按下不放,可以跳過自啟動的宏

ALT+F4關(guān)閉當(dāng)前應(yīng)用程序

ALT+SPACEBAR打開程序最左上角的菜單

ALT+TAB切換當(dāng)前程序

ALT+ESC切換當(dāng)前程序

ALT+ENTER將windows下運行的MSDOS窗口在窗口和全屏幕狀態(tài)間切換

PRINTSCREEN將當(dāng)前屏幕以圖象方式拷貝到剪貼板

ALT+PRINTSCREEN將當(dāng)前活動程序窗口以圖象方式拷貝到剪貼板

CTRL+F4關(guān)閉當(dāng)前應(yīng)用程序中的當(dāng)前文本(如word中)

CTRL+F6切換到當(dāng)前應(yīng)用程序中的下一個文本(加shift可以跳到前

一個窗口)

在IE中:

ALT+RIGHTARROW顯示前一頁(前進鍵)

ALT+LEFTARROW顯示后一頁(后退鍵)

CTRL+TAB在頁面上的各框架中切換(加shift反向)

F5刷新

CTRL+F5強行刷新1.打開“我的電腦”-“工具”-“文件夾選項”-“查看”-在“顯示所有文件和文件夾”選項前打勾-“確定”

2.刪除以下文件夾中的內(nèi)容:

x:\DocumentsandSettings\用戶名\Cookies\下的所有文件(保留index文件)

x:\DocumentsandSettings\用戶名\LocalSettings\Temp\下的所有文件(用戶臨時文件)

x:\DocumentsandSettings\用戶名\LocalSettings\TemporaryInternetFiles\下的所有文件(頁面文件)

x:\DocumentsandSettings\用戶名\LocalSettings\History\下的所有文件(歷史紀(jì)錄)

x:\DocumentsandSettings\用戶名\Recent\下的所有文件(最近瀏覽文件的快捷方式)

x:\WINDOWS\Temp\下的所有文件(臨時文件)

x:\WINDOWS\ServicePackFiles(升級sp1或sp2后的備份文件)

x:\WINDOWS\DriverCache\i386下的壓縮文件(驅(qū)動程序的備份文件)

x:\WINDOWS\SoftwareDistribution\download下的所有文件

3.如果對系統(tǒng)進行過windoesupdade升級,則刪除以下文件:x:\windows\下以$u...開頭的隱藏文件

4.然后對磁盤進行碎片整理,整理過程中請退出一切正在運行的程序

5.碎片整理后打開“開始”-“程序”-“附件”-“系統(tǒng)工具”-“系統(tǒng)還原”-“創(chuàng)建一個還原點”(最好以當(dāng)時的日期作為還原點的名字)

6.打開“我的電腦”-右鍵點系統(tǒng)盤-“屬性”-“磁盤清理”-“其他選項”-單擊系統(tǒng)還原一欄里的“清理”-選擇“是”-ok了

7、在各種軟硬件安裝妥當(dāng)之后,其實XP需要更新文件的時候就很少了。刪除系統(tǒng)備份文件吧:開始→運行→sfc.exe/purgecache近3xxM。(該命令的作用是立即清除"Windows文件保護"文件高速緩存,釋放出其所占據(jù)的空間)

8、刪掉\windows\system32\dllcache下dll檔(減去200——300mb),這是備用的dll檔,只要你已拷貝了安裝文件,完全可以這樣做。

9、XP會自動備份硬件的驅(qū)動程序,但在硬件的驅(qū)動安裝正確后,一般變動硬件的可能性不大,所以也可以考慮將這個備份刪除,文件位于\windows\drivercache\i386目錄下,名稱為driver.cab,你直接將它刪除就可以了,通常這個文件是74M。

10、刪除不用的輸入法:對很多網(wǎng)友來說,WindowsXPt系統(tǒng)自帶的輸入法并不全部都合適自己的使用,比如IMJP8_1日文輸入法、IMKR6_1韓文輸入法這些輸入法,如果用不著,我們可以將其刪除。輸入法位于\windows\ime\文件夾中,全部占用了88M的空間。

11、升級完成發(fā)現(xiàn)windows\多了許多類似$NtUninstallQ311889$這些目錄,都干掉吧,1x-3xM

12、另外,保留著\windows\help目錄下的東西對我來說是一種傷害,呵呵。。。都干掉!

13、關(guān)閉系統(tǒng)還原:系統(tǒng)還原功能使用的時間一長,就會占用大量的硬盤空間。因此有必要對其進行手工設(shè)置,以減少硬盤占用量。打開"系統(tǒng)屬性"對話框,選擇"系統(tǒng)還原"選項,選擇"在所有驅(qū)動器上關(guān)閉系統(tǒng)還原"復(fù)選框以關(guān)閉系統(tǒng)還原。也可僅對系統(tǒng)所在的磁盤或分區(qū)設(shè)置還原。先選擇系統(tǒng)所在的分區(qū),單擊"配置"按鈕,在彈出的對話框中取消"關(guān)閉這個驅(qū)動器的系統(tǒng)還原"選項,并可設(shè)置用于系統(tǒng)還原的磁盤空間大小。

14、休眠功能會占用不少的硬盤空間,如果使用得少不妨將共關(guān)閉,關(guān)閉的方法是的:打開"控制面板",雙擊"電源選項",在彈出的"電源選項屬性"對話框中選擇"休眠"選項卡,取消"啟用休眠"復(fù)選框。

15、卸載不常用組件:XP默

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論