一個完整的大作業:80電影天堂網站


 

1.選一個自己感興趣的主題。

2.網絡上爬取相關的數據。

3.進行文本分析,生成詞雲。

4.對文本分析結果解釋說明。

5.寫一篇完整的博客,附上源代碼、數據爬取及分析結果,形成一個可展示的成果。

網站:80電影天堂網站(http://www.80dyy.cc/80kehuan/index.html)

我預期是首先完成的爬取所有科幻片的演員的名字,然后分析出哪些演員的頻率高,得知他在該網站的電影中的熱門程度

分析網站,看的電影的標題和連接放在<li>標簽里面的<dl>標簽里,主要看代碼部分的解釋

爬取內容保存到數據庫代碼import requests

由於<dl>標簽里 的連接只是后面那部分,所以使用了一條循環,補全鏈接

for names in soup.select('dl'):      
        name = names.select('a')[0]['href']
        addname = "http://www.80dyy.cc{}".format(name)        

提取內容到數據庫的代碼:

 

import re from bs4 import BeautifulSoup from datetime import datetime import pandas import sqlite3 def getdetail(url): resd = requests.get(url) resd.encoding='gbk' soupd=BeautifulSoup(resd.text,'html.parser') namels={} #print(url)
    for names in soupd.select('.mtext'): namels['標題'] = names.select('li')[0].contents[0].text namels['鏈接']= url action= names.select('li')[1].text action = action.replace('\xa0',' ') namels["演員"] = action[3:len(action)+1]
    return(namels) def onepage(pageurl): res = requests.get(pageurl) res.encoding = 'gbk' soup = BeautifulSoup(res.text,'html.parser') namels = [] for names in soup.select('dl'): name = names.select('a')[0]['href'] #print(name)
        addname = "http://www.80dyy.cc{}".format(name)
 namels.append(getdetail(addname)) #break #這個用來停止循環,等一頁的所有信息都完成后刪去即可
    return namels newst= [] zurl = 'http://www.80dyy.cc/80kehuan/'
resd = requests.get(zurl) resd.encoding='gbk' soup=BeautifulSoup(resd.text,'html.parser') newst.extend(onepage(zurl)) for i in range(2,4): listurl='http://www.80dyy.cc/80kehuan/index{}.html'.format(i) newst.extend(onepage(listurl)) #print(newst)
 df = pandas.DataFrame(newst)
with sqlite3.connect("dyactiondb10.sqlite") as db: df.to_sql('dyactiondb108',con = db)

 

 保存成功

 保存到本地excel並查看excel表格:

df = pandas.DataFrame(newst)
df.to_excel('dyaction.xlsx')

 

 

 

 

 

 

 

由上面得到的列表newst。接下來把列表的演員全部輸出,並保存到text文件里。

df = pandas.DataFrame(newst)
print(df["演員"])

 

由於文件內容過多,我選擇先完成2個頁面的輸出:

處理成字符型數據:

df = pandas.DataFrame(newst)
#print(df["演員"])
straction = " ".join(df["演員"])
print(straction)

輸出的結果:

 

 接下來,做詞雲統計。

把保存到text的文件先統計出現的次數,看有沒有不相干的詞語。

import jieba

txt = open("ac1.txt","r",encoding='utf-8').read()

ls = []
words = jieba.lcut(txt)
counts = {}
for word in words:
    ls.append(word)
    if len(word) == 1:
        continue
    else:
        counts[word] = counts.get(word,0)+1
        
    
items = list(counts.items())
items.sort(key = lambda x:x[1], reverse = True)
for i in range(50):
    word , count = items[i]
    print ("{:<10}{:>5}".format(word,count))

結果:

 

接下來完成詞雲部分:

 

 

import jieba
import WordCloud
import matplotlib.pyplot as plt

txt = open("ac1.txt","r",encoding='utf-8').read()

wordlist = jieba.cut(text,cut_all=True)
wl_split = "/".join(wordlist)

mywc = WordCloud().generate(text)
plt.imshow(mywc)
plt.axis("off")
plt.show()

分析出邁克爾、克里斯、約翰、威廉等詞出現的次數最多。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM