1. 程式人生 > >Python入門之電影詞雲分析

Python入門之電影詞雲分析

需求:將豆瓣電影的評論爬取出來,用詞雲的方式對其進行分析
步驟分析:
1). 分析網站的原始碼
2). 通過url獲取電影名和電影id
3). 獲取指定的電影的評論
4). 資料的清洗,去除一些不需要的資訊
5). 進行詞雲的分析

分析網站的原始碼
通過原始碼分析,豆瓣電影是靠電影名稱和電影的id來區分每個電影的,想要獲取各個電影的影評,需要先獲取上面兩個資訊
比如以下這部電影,它的id就是:27039069
通過不同的id號,來訪問不同的電影影評。
在這裡插入圖片描述
通過url獲取電影名和電影id

import requests
from bs4 import BeautifulSoup
url='https://movie.douban.com/cinema/nowplaying/xian/'
# 1)獲取頁面資訊
response=requests.get(url)
content=response.text
# print(content)
# 2)分析頁面,獲取id和電影名
soup=BeautifulSoup(content,'html.parser')
# 先找到所有的電影資訊對應的li標籤
nowplaying_movie_list=soup.find_all('li',class_='list-item')
# 儲存所有的電影資訊(名稱和id)
movies_info=[]
for item in nowplaying_movie_list:
    nowplaying_movie_dict = {}
    nowplaying_movie_dict['title']=item['data-title']
    nowplaying_movie_dict['id']=item['id']
    movies_info.append(nowplaying_movie_dict)
print(movies_info)

獲取指定的電影的評論

import requests
from bs4 import BeautifulSoup
import threading

def get_info(id,pageNum):
    # 根據頁數確定start的值
    start=20*(pageNum-1)
    url='https://movie.douban.com/subject/%s/comments?start=%s&limit=20&sort=new_score&status=P' %(id,start)
    # 2)爬取評論資訊的網頁內容
    content=requests.get(url).text
    # 3)通過bs4分析網頁
    soup=BeautifulSoup(content,'html.parser')
    commentsList=soup.find_all('span',class_='short')
    comments=''
    for commentTag in commentsList:
        comments+=commentTag.text
    print(comments)
    


id = '27039069'
threads=[]
for pageNum in range(1,10):
    get_info(id,pageNum)
    t=threading.Thread(target=get_info,args=(id,pageNum))
    threads.append(t)
    t.start()
[thread.join() for thread in threads]

資料的清洗,去除一些不需要的資訊
將評論中的表情或者特殊字元去掉,只留下文字與英文,作詞雲分析

import re
with open('./27039069.txt')as f:
    comments=f.read()
pattern=re.compile(r'([\u4e00-\u9fa5]+|[a-zA-Z]+)')
deal_comments=re.findall(pattern,comments)
newComments=''
for item in deal_comments:
    newComments+=item
print(newComments)

做詞雲分析時,這裡需要兩個特殊的模組

import wordcloud
import jieba
import jieba
import wordcloud
import numpy
from PIL import Image

result=jieba.lcut(open('./27039069.txt').read())
imageObj=Image.open('./image.jpg')
cloud_mask=numpy.array(imageObj)
wc=wordcloud.WordCloud(
    background_color='snow',
    mask=cloud_mask,
    font_path='./msyh.ttf',
    min_font_size=5,
    max_font_size=50,
    width=260,
    height=260,
)
wc.generate(','.join(result))
wc.to_file('./ciyun.png')

在這裡插入圖片描述