自拟题目大作业

描述
自拟题目,完成一个利用Python程序的大作业,不少于100行代码。
需要提交:
(1)可运行的代码
(2)设计文档(整体设计目标、代码总体框架、第三方库介绍、关键代码说明、效果和结论),不少于3页,不要大段贴代码
评分标准如下:
(1)预定目标完成度
(2)创新创意
(3)代码量达标
(4)文档完备性
两人一组,同组同分,请两位同学用各自账号同时提交作业。
提交时请选择文件提交方式,文件逐一提交,不要用压缩文件。

解析:
是道开放性题目,由于当时小学期还要做网站且python学的也不好,所以就模范网上的python爬虫简易教程写了个爬取豆瓣评论并生成词云展示的程序。网上此类教程很多,也易上手,有些时间紧的同学可以考虑考虑,当然大佬请无视之。

"""
从豆瓣上爬取《秦时明月》、《天行九歌》、《武庚纪》已播放的几部的评论
将爬取的评论数据清洗后存入文本文档
再对文本文档进行分词处理
将分词处理得到的结果进行生成词云
爬虫及分词统计的方法基本上是参照书上的步骤,数据清洗和词云的实现由于书上没说所以参考了一下网上的教程
"""
import re
import time
import jieba
import requests
import numpy as np
import matplotlib.pyplot as plt
from bs4 import BeautifulSoup as bs
from PIL import Image
from wordcloud import WordCloud,ImageColorGenerator
#获取评论
def GetComments(CommentID,name):
    #爬取某一部的10页评论
    Comment_List=[]
    for i in range(10):
        start=(i+1)*20
        Url='https://movie.douban.com/subject/'+CommentID+'/comments?start='+str(start)
        print(Url)
        try:
            Comment_HTML=requests.get(Url)
            Comment_HTML.raise_for_status()
            Comment_HTML.encoding='utf-8'
        except:
            ""
        soup=bs(Comment_HTML.text,'html.parser')
        Div_CommentL=soup.find_all('div',class_='comment')
        for s in Div_CommentL:
            lp=s.find_all('p')[0]
            if len(lp)==0:
                continue
            Comment_List.append(lp.string)
    #数据清洗
    Comments=''
    for i in range(len(Comment_List)):
        Comments=Comments+(str(Comment_List[i])).strip()
        Wash_mode=re.compile(r'[\u4e00-\u9fa5]+')#匹配中文字符
        Wash_ing=re.findall(Wash_mode,Comments)
        Wash_ed=''.join(Wash_ing)
    #存档
    if name=="秦时明月":
        fo=open("Comment_QSMY.txt","a+")
    elif name=="天行九歌":
        fo=open("Comment_TXJG.txt","a+")
    else:
        fo=open("Comment_WGJ.txt","a+")
    fo.write(Wash_ed)
    fo.close()
#词频统计
def WordFrequency(name):
    if name=="秦时明月":
        txt=open("Comment_QSMY.txt","r").read()
    elif name=="天行九歌":
        txt=open("Comment_TXJG.txt","r").read()
    else:
        txt=open("Comment_WGJ.txt","r").read()
    #结巴分词
    words=jieba.lcut(txt)
    #统计词频
    counts={}
    for word in words:
        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)
    return items
#词云生成
def WordCloud_QSMY(Words):
    image=Image.open("BG_Photo.jpg")#词云形状的参考图
    WC_BG=np.array(image)
    wordcloud_QSMY=WordCloud(font_path="FontFamily.ttf",
                             background_color="white",
                             mask=WC_BG,
                             stopwords="Stopwords.txt",
                             max_words=1000,
                             )
    wordcloud_QSMY.generate_from_frequencies(dict(Words))
    image_color=ImageColorGenerator(WC_BG)
    plt.imsave("QSMY_WordCloud.jpg",wordcloud_QSMY.recolor(color_func=image_color))#保存图片
def WordCloud_TXJG(Words):
    image=Image.open("BG_Photo.jpg")
    WC_BG=np.array(image)
    wordcloud_TXJG=WordCloud(font_path="FontFamily.ttf",
                             background_color="white",
                             mask=WC_BG,
                             stopwords="Stopwords.txt",
                             max_words=1000,
                             )
    wordcloud_TXJG.generate_from_frequencies(dict(Words))
    image_color=ImageColorGenerator(WC_BG)
    plt.imsave("TXJG_WordCloud.jpg",wordcloud_TXJG.recolor(color_func=image_color))
def WordCloud_WGJ(Words):
    image=Image.open("BG_Photo.jpg")
    WC_BG=np.array(image)
    wordcloud_WGJ=WordCloud(font_path="FontFamily.ttf",
                             background_color="white",
                             mask=WC_BG,
                             stopwords="Stopwords.txt",
                             max_words=1000,
                             )
    wordcloud_WGJ.generate_from_frequencies(dict(Words))
    image_color=ImageColorGenerator(WC_BG)
    plt.imsave("WGJ_WordCloud.jpg",wordcloud_WGJ.recolor(color_func=image_color))
#主函数
def main():
    #《秦时明月》的评论词云
    qsmy_ls=['3074717','3151809','4246437','20501094','5951340']#《秦时明月》已播出的5部的豆瓣代号
    for QSMY_ID in qsmy_ls:
        GetComments(QSMY_ID,'秦时明月')
        time.sleep(5)#休眠5秒钟
    Qwords_items=WordFrequency('秦时明月')
    WordCloud_QSMY(Qwords_items)
    #《天行九歌》的评论词云
    txjg_ls=['25884755','26184588']#《天行九歌》已播出的2部的豆瓣代号
    for TXJG_ID in qsmy_ls:
        GetComments(TXJG_ID,'天行九歌')
        time.sleep(5)#休眠5秒钟
    Twords_items=WordFrequency('天行九歌')
    WordCloud_TXJG(Twords_items)
    #《武庚纪》的评论词云
    wgjID='26564735'#《武庚纪》已播出第一部的豆瓣代号
    GetComments(wgjID,'武庚纪')
    Wwords_items=WordFrequency('武庚纪')
    WordCloud_WGJ(Wwords_items)
main()

用到的停止词:
http://download.csdn.net/download/qq_38597315/10228649

最后放几张图片吧:
自拟题目大作业_第1张图片
自拟题目大作业_第2张图片
自拟题目大作业_第3张图片

你可能感兴趣的:(2017小学期python)