大數(shù)據(jù)分析作業(yè)

大數(shù)據(jù) 分析 作業(yè)| 2022-09-05 admin
大數(shù)據(jù)分析作業(yè)

#1.爬數(shù)據(jù)

fromosimportwrite

importrequests#獲取網(wǎng)頁源碼:

importurllib.request

frombs4importBeautifulSoup#用來解析解析HTML文檔

importtime

#2.數(shù)據(jù)預(yù)處理

importjieba#分詞、去停用詞等

#3.文本特征工程(向量化)

fromsklearn.feature_extraction.textimportCountVectorizer

fromsklearn.feature_extraction.textimportTfidfTransformer

importpandasaspd

importnumpyasnp

#1.爬數(shù)據(jù)

print("***n***n***n這是一個爬蟲,正在爬取百度貼吧的一個內(nèi)容,請耐心等候:。。。")

#設(shè)置保存數(shù)據(jù)的文件

f=open(r'C:UsersDELLDesktop大數(shù)據(jù)大數(shù)據(jù)實驗.txt','a+',encoding='utf-8')#打開文件,a+表示在文件末尾追加

end_time=time.strftime('%Y-%m-%d%H:%M:%S',time.localtime(time.time()))#當(dāng)前的時間

#f.write("【時間:"+end_time+"】n【標(biāo)題】阿巴阿巴"+'n')

#獲取網(wǎng)頁源碼:(得到解析HTML文檔)(請在聯(lián)網(wǎng)情況下進(jìn)行)

#url="https://tieba.baidu.com/f?ie=utf-8&kw=%E7%89%A9%E7%90%86"

url="https://tieba.baidu.com/f?kw=%E7%9D%A1%E8%A7%89&fr=fenter&prequery=%E7%9D%A1%E8%A7%89%E9%81%87%E5%88%B0%E9%9A%9C%E7%A2%8D"

r=requests.get(url)

print("狀態(tài)碼:",r.status_code,"若顯示2xx表示連接成功,可繼續(xù)下一步")#若打印2xx表示連接成功,可繼續(xù)下一步

print("網(wǎng)頁編碼方式:",r.apparent_encoding)

html=urllib.request.urlopen(url).read()#得到html文本

#print(html)

#解析HTML文檔

soup=BeautifulSoup(html,"html.parser")#soup=BeautifulSoup(html,"lxml"),是lxml的問題,在報錯代碼中把函數(shù)參數(shù)中所有的"lxml"改成"html.parser"

print(soup.prettify())#.prettify()打印格式,就是將soup中的'n'變?yōu)閾Q行

print("------------------------------------------------------------------------------")

#從網(wǎng)頁中提取想要的數(shù)據(jù)所在的節(jié)點

all=soup.find_all("a",class_="j_th_tit")#查找標(biāo)簽中的class_="j_th_tit",find_all返回數(shù)組

#print(all)

print("------------------------------------------------------------------------------")

ALL=str(all).split('</a>')#字符串化,去掉了</a>

ALL.pop()

print(ALL)

print('--------------------------------------------------------------------------------------------------------------')

L=[]

forsinALL:

L.append(s.split('title="')[1])#split()返回的是一個數(shù)組,L.append()添加的是title后面的東西

print(L)

i=0

forsinL:

q,w=s.split('">',1)#q='>'前面的字符串,w='>'后面的字符串,逗號后面1表示分割一次

#i+=1

#f.write('【標(biāo)題'+str(i)+'】:'+q+'n')

f.write(q+'n')

f.close()

#在這一步,我們在文件保存了我們爬到的數(shù)據(jù),,放在了'C:UsersDELLDesktop大數(shù)據(jù)大數(shù)據(jù)實驗.txt'

#2.去停用詞、名詞等(文本預(yù)處理)步驟:處理---》讀文件-》處理-》寫入文件

#(1)去除非中文字符,將處理后的文檔寫入大數(shù)據(jù)實驗文本數(shù)據(jù)0

f=open(r'C:UsersDELLDesktop大數(shù)據(jù)大數(shù)據(jù)實驗.txt','r',encoding='utf-8',errors='ignore')#將文本格式編碼為utf-8,防止編碼錯誤

fw=open(r'C:UsersDELLDesktop大數(shù)據(jù)大數(shù)據(jù)實驗文本數(shù)據(jù)0.txt','w',encoding='utf-8',errors='ignore')

forlineinf:#逐行處理

constr=''#記錄每行處理后的數(shù)據(jù)

forucharinline:

ifuchar>=u'u4e00'anduchar<=u'u9fa5':#是中文字符

ifuchar!='':#去除空格

constr+=uchar

fw.write(constr+'n')#寫入處理后的數(shù)據(jù),每行以空格隔開

f.close()

fw.close()#不要忘記

#2.去停用詞、名詞等(文本預(yù)處理)步驟:處理---》讀文件-》處理-》寫入文件

#(1)去除非中文字符,將處理后的文檔寫入大數(shù)據(jù)實驗文本數(shù)據(jù)0

f=open(r'C:UsersDELLDesktop大數(shù)據(jù)1疾風(fēng)劍豪吧.txt','r',encoding='utf-8',errors='ignore')#將文本格式編碼為utf-8,防止編碼錯誤

fw=open(r'C:UsersDELLDesktop大數(shù)據(jù)1大數(shù)據(jù)實驗文本數(shù)據(jù)0.txt','w',encoding='utf-8',errors='ignore')

forlineinf:#逐行處理

constr=''#記錄每行處理后的數(shù)據(jù)

forucharinline:

ifuchar>=u'u4e00'anduchar<=u'u9fa5':#是中文字符

ifuchar!='':#去除空格

constr+=uchar

fw.write(constr+'n')#寫入處理后的數(shù)據(jù),每行以空格隔開

f.close()

fw.close()#不要忘記

#準(zhǔn)備去停用詞

#(2)-------------------創(chuàng)建放停用詞的數(shù)組stopwords[]

stopwords=[]

stopwords=[]#注意,去停用詞表中的標(biāo)點符號應(yīng)該用行隔開,不能用空格隔開,否則forwordinopen會將它看為一個字符串,數(shù)組中只有一個元組

forwordinopen(r"C:UsersDELLDesktop大數(shù)據(jù)1去停用詞表.txt","r",encoding='utf-8'):#這里讓我把去"停用詞表.txt"另存為是編碼方式改為wtf-8才不報錯

stopwords.append(word.strip())

#-------------------創(chuàng)建結(jié)束-------------------------------------

#去停用詞(3)

jieba.load_userdict(r'C:UsersDELLDesktop大數(shù)據(jù)1詞典.txt')#添加詞典

print('-----------------------------去停用詞然后將去停用詞后的字符串存到大數(shù)據(jù)實驗文本數(shù)據(jù).txt----------------------------------------------------')

f2=open(r'C:UsersDELLDesktop大數(shù)據(jù)1大數(shù)據(jù)實驗文本數(shù)據(jù)0.txt','r+',encoding='utf-8')#r+:表示用于讀寫

f1=open(r'C:UsersDELLDesktop大數(shù)據(jù)1大數(shù)據(jù)實驗文本數(shù)據(jù).txt','a',encoding='utf-8')#a:表示用于追加

L=f2.readlines()#f.readlines()返回一個數(shù)組,一行為一個元素

forl1inL:#每一行進(jìn)行分詞->取停用詞->寫入大數(shù)據(jù)實驗文本數(shù)據(jù).txt

a=""

seg_lists=jieba.cut(l1,cut_all=True)#全模式,jieba.cut()返回一個可迭代的generator

forseg_listinseg_lists:#一個for循環(huán),每一行的seg_list->a

#print(seg_list)

ifseg_list.encode("utf-8")notinstopwords:

a+=seg_list+''

f1.write(a)#寫入大數(shù)據(jù)實驗文本數(shù)據(jù).txt

f2.close()

f1.close()

#3.文本特征工程(統(tǒng)計每個詞出先的頻率)

#(1)(完成詞頻向量化)

#打開要向量化的文件

vectorizer_向量化=CountVectorizer()

f2=open(r'C:UsersDELLDesktop大數(shù)據(jù)1大數(shù)據(jù)實驗文本數(shù)據(jù).txt','r+',encoding='utf-8')

corpus=f2.readlines()#L2是一個數(shù)組