python課程設(shè)計-當(dāng)當(dāng)網(wǎng)Python圖書數(shù)據(jù)分析_第1頁
python課程設(shè)計-當(dāng)當(dāng)網(wǎng)Python圖書數(shù)據(jù)分析_第2頁
python課程設(shè)計-當(dāng)當(dāng)網(wǎng)Python圖書數(shù)據(jù)分析_第3頁
python課程設(shè)計-當(dāng)當(dāng)網(wǎng)Python圖書數(shù)據(jù)分析_第4頁
python課程設(shè)計-當(dāng)當(dāng)網(wǎng)Python圖書數(shù)據(jù)分析_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

python課程設(shè)計——當(dāng)當(dāng)?Python圖書數(shù)據(jù)分析?、數(shù)據(jù)獲取本次項?數(shù)據(jù)來源為爬?獲取,?標(biāo)為為當(dāng)當(dāng)?上關(guān)于python的書籍爬?主要思路:通過觀察當(dāng)當(dāng)?,觀察結(jié)構(gòu),選?適合的?法。先進(jìn)?單頁的數(shù)據(jù)爬取,再進(jìn)?多頁爬取;解析?法為xpath?法,爬取?標(biāo)為:書名、價格、作業(yè)、出版社、出版時間、商品鏈接、評論數(shù)量;最后將爬取的數(shù)據(jù)保存到csv?件當(dāng)中。爬?代碼如下:

importrequestsfromlxmlimportetreeimportreimportcsvdefget_page():#數(shù)據(jù)的多頁爬取,經(jīng)過觀察,所有頁?地址中,有?個唯?的參page_index數(shù)發(fā)?改變#通過對參數(shù)page_indexfor循環(huán),遍歷每?頁的頁?,實(shí)現(xiàn)多頁爬取forpageinrange(1,101):的url='/?key=python&act=input&page_index=1'+str(page+1)+'#J_tab'headers={'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36''(KHTML,likeGecko)Chrome/96.0.4664.110Safari/537.36'}response=requests.get(url=url,headers=headers)parse_page(response)#可以在操作頁?實(shí)時觀察爬取的進(jìn)度print('page%s'%page)defparse_page(response):#通過etree將圖書的七項信息封裝為?條數(shù)據(jù),保存到data列表當(dāng)中tree=etree.HTML(response.text)li_list=tree.xpath('//ul[@class="bigimg"]/li')forliinli_list:data=[]try:#通過xpath的?法對所需要的信息進(jìn)?解析#1、獲取書的標(biāo)題并添加到列表中,title=li.xpath('./a/@title')[0].strip()data.append(title)#2、獲取價格并添加到列表中,price=li.xpath('./p[@class="price"]/span[1]/text()')[0]data.append(price)#3、獲取作者并添加到列表中,author=''.join(li.xpath('./p[@class="search_book_author"]/span[1]//text()')).strip()data.append(author)#4、獲取出版社publis=''.join(li.xpath('./p[@class="search_book_author"]/span[3]//text()')).strip()data.append(publis)#5、獲取出版時間并添加到列表中,time=li.xpath('./p[@class="search_book_author"]/span[2]/text()')[0]pub_time=re.sub('/','',time).strip()data.append(pub_time)#6、獲取商品鏈接并添加到列表中,commodity_url=li.xpath('./p[@class="name"]/a/@href')[0]data.append(commodity_url)#7、獲取評論數(shù)量,并添加到列表中comment=li.xpath('./p[@class="search_star_line"]/a/text()')[0].strip()data.append(comment)except:passsave_data(data)defsave_data(data):writer.writerow(data)defmain():key='python書籍222'#input('Pleaseinputkey:')get_page(key)#將所有的數(shù)據(jù)儲存到csv?件當(dāng)中fp=open('python書籍3.csv','w',encoding='utf-8-sig',newline='')writer=csv.writer(fp)header=['書名','價格','作者','出版社','出版時間','商品鏈接','評論數(shù)量']writer.writerow(header)main()fp.close()爬?部分結(jié)果展?:?、數(shù)據(jù)整理分析本項?對價格、出版社以及評論進(jìn)?分析1、價格(1)數(shù)據(jù)預(yù)處理通過觀察爬取下來的數(shù)據(jù)發(fā)現(xiàn),部分?jǐn)?shù)據(jù)存在空值,影響分析,所以多價格列進(jìn)?簡單的數(shù)據(jù)預(yù)處理操作,將有空值的整條數(shù)據(jù)刪除利?pandas庫中的null函數(shù)查詢是否有空值,有空值就將其整條數(shù)據(jù)刪除importpandasaspd#讀取?件df=pd.read_csv(r'D:\pythonApp\pyproject\我的python\?絡(luò)?數(shù)據(jù)采集\dangdang\python書籍.csv')#對價格列進(jìn)?操作index=df['價格'].notnull()df=df[index]#將處理好的?件保存為python書籍2df.to_csv(r'D:\pythonApp\pyproject\我的python\?絡(luò)?數(shù)據(jù)采集\dangdang\python書籍2.csv')(2)數(shù)據(jù)分類操作然后對價格列進(jìn)?分類,將其分為三個類別,分別為價格在30元以下的,價格在30元到70元之間的,價格在70元以上的,注意數(shù)據(jù)的數(shù)據(jù)的類型是什么,是否需要類型的轉(zhuǎn)換。importcsv#打開存放書籍的?檔并讀取file=open('D:\pythonApp\pyproject\我的python\?絡(luò)?數(shù)據(jù)采集\dangdang\python書籍2.csv',encoding='utf-8')fileReader=csv.reader(file)data=[]#s1、s2、s3分別為30元以下,30到70元,70元以上s1=[]s2=[]s3=[]filedata=list(fileReader)foriinfiledata:#選中價格的?列m=i[1:2]data.append(''.join(m))forminrange(1,6000):#將價格強(qiáng)制轉(zhuǎn)換為float類型iffloat(data[m])<30.00:#將價格低于30元的存放到s1s1.append(data[m])eliffloat(data[m])>70.00:#價格將?于70元的存放到s3s3.append(data[m])else:#將價格在30到70元的存放到s2s2.append(data[m])#同時輸出s1、s2、s3的長度來代表其數(shù)量print(len(s1))print(len(s2))print(len(s3))(3)數(shù)據(jù)的聚類算法同時對價格進(jìn)??個聚類算法的運(yùn)?,主要作?為練習(xí)使?聚類算法importjiebaimportcollectionsimportwordcloudimportmatplotlib.pyplotasplt#存放去停?詞stopword_list=[]#存放分詞object_list=[]#去停?詞forwordinopen("D:\pythonApp\pyproject\我的python\?絡(luò)?數(shù)據(jù)采集\dangdang\stopwords.txt",'rb'):stopword_list.append(word.strip())#?本分詞fn=open("D:\pythonApp\pyproject\我的python\?絡(luò)?數(shù)據(jù)采集\dangdang\Comment_Data.txt","rb").read()seg_list_exaut=jieba.cut(fn)foriinseg_list_exaut:ifi.encode("utf-8")notinstopword_list:object_list.append(i)#詞頻統(tǒng)計、排序word_counts=collections.Counter(object_list)word_counts_top10=word_counts.most_common(10)print(word_counts_top10)#詞圖云展?wc=wordcloud.WordCloud(font_path=r'C:\Windows\Fonts\simhei.ttf',background_color="white",margin=5,width=1000,height=800,max_words=1000,max_font_size=200)wc.generate_from_frequencies(word_counts)wc.to_file('DangDangWang_WordCloud_show.jpg')plt.imshow(wc)plt.axis("off")plt.show()聚類算法的結(jié)果2、出版社對于出版社的分析主要為統(tǒng)計出版社的數(shù)量,并對每個出版社出版關(guān)于python的書籍的數(shù)量進(jìn)?統(tǒng)計分析,因此需要對數(shù)據(jù)進(jìn)?去重處理(1)數(shù)據(jù)預(yù)處理數(shù)據(jù)的去重處理file=open('D:\pythonApp\pyproject\我的python\?絡(luò)?數(shù)據(jù)采集\dangdang\python書籍.csv',encoding='utf-8')fileReader=csv.reader(file)filedata=list(fileReader)data=[]foriinfiledata:#數(shù)據(jù)表第四列為出版社t=i[3:4]data.append(''.join(t))#去重punlish_Number=len(set(data))print('出版社共'+str(punlish_Number)+'個')punlish_data=list(set(data))(2)統(tǒng)計對出版社的種類以及數(shù)量進(jìn)?統(tǒng)計#統(tǒng)計出版社dict={}foriindata:dict[i]=dict.get(i,0)+1#輸出所有的出版社以及個數(shù)print(dict)#print(len(dict))結(jié)果展?由結(jié)果可知出版社共有50個,選取前?名的出版社進(jìn)?保存3、評論數(shù)量通過觀察處理,發(fā)現(xiàn)存在很多數(shù)據(jù)沒有評論,因此需要進(jìn)?預(yù)處理對沒有評論數(shù)量的數(shù)據(jù)進(jìn)?刪除操作importpandasaspd#讀取?件df=pd.read_csv(r'D:\pythonApp\pyproject\我的python\?絡(luò)?數(shù)據(jù)采集\dangdang\python書籍.csv')#對價格列進(jìn)?操作index=df['評論數(shù)量'].notnull()df=df[index]df.to_csv(r'D:\pythonApp\pyproject\我的python\?絡(luò)?數(shù)據(jù)采集\dangdang\python書籍3.csv')結(jié)果展?對評論數(shù)量進(jìn)?排序,選取評論數(shù)量前?的書籍進(jìn)?展?三、數(shù)據(jù)可視化1、價格結(jié)果展?代碼importmatplotlib.pyplotasplt#設(shè)置中?顯?plt.rcParams['font.sans-serif']='SimHei'plt.rcParams['axes.unicode_minus']=Falselabels='30元以下','30到70元','70元以上'fraces=[125,3427,2447]#使畫出來的圖形為標(biāo)準(zhǔn)圓plt.axes(aspect=1)#突出分離出數(shù)量最多的第?部分explode=[0,0.1,0]colors=['skyblue','pink','yellow']plt.pie(x=fraces,labels=labels,colors=colors,#顯??例autopct='%0f%%',explode=explode,#顯?陰影,使圖形更加美觀shadow=True)plt.show()2、出版社結(jié)果展?代碼importmatplotlib.pyplotasplt#設(shè)置中?顯?plt.rcParams['font.sans-serif']='SimHei'plt.rcParams['axes.unicode_minus']=Falsenum_list=[1530,1390,1255,625,194,100,99,95,93,93]name_list=['?民郵電出版社','機(jī)械?業(yè)出版社','電??業(yè)出版社','清華?學(xué)出版社','北京?學(xué)出版社','中國?利?電出版社','中國鐵道出版社','東南?學(xué)出版社','華中科技?學(xué)出版社','重慶?學(xué)出版社']plt.barh(range(len(num_list)),num_list,align="center",#設(shè)置標(biāo)簽tick_label=name_list,)plt.title('出版社前?柱狀圖')plt.show()3、評論本項分析選取評論數(shù)量第?的書,將其所有的評論進(jìn)?了爬取,并制作詞云圖進(jìn)?展?評論爬取代碼file=open('D:\pythonApp\pyproject\我的python\?絡(luò)?數(shù)據(jù)采集\dangdang\python書籍4.csv',encoding='utf-8')fileReader=csv.reader(file)filedata=list(fileReader)books_number=[]foriinfiledata:t=(i[5:6])books_number.append(''.join(t))print(books_number)forjinrange(1,6):foriinrange(1,21):url='/index.php?r=comment%2Flist&productId='+books_number[j]+\'&categoryPath=01.54.06.19.00.00&mainProductId=25580336&mediumId=0&pageIndex='+str(i)+\headers={'&sortType=1&filterType=1&isSystem=1&tagId=0&tagFilterCount=0&template=publish''User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/''87.0.4280.88Safari/537.36'}print(url)req=urllib.request.Request(url,headers=headers)response=urllib.request.urlopen(req)unicodester=json.load(response)html=unicodester["data"]["list"]["html"]pattern=pile('<span><ahref.*?>(.*?)<\/a><\/span>',re.S)comments=re.findall(pattern,html)print("正在爬取第"+str(i)+"頁評論")withopen('Comment_Data.txt','a')astxt:txt.write(str(comments)+"\n")結(jié)果展?因?yàn)槲业耐?詞沒有篩選好,導(dǎo)致制作出來的詞云圖不夠規(guī)范,?家可以根據(jù)??的需要對停?詞進(jìn)?添加代碼importjiebaimportcollectionsimportwordcloudimportmatplotlib.pyplotasplt#存放去停?詞stopword_list=[]#存放分詞object_list=[]#去停?詞forwordinopen("D:\pythonApp\pyproject\我的

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論