• 爬虫综合大作业


    作业要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3075

           新世纪以来,越来越多的人会走出房间,迈向电影院。观看那一幕幕或惊心动魄,或温情的影片,那么电影对于我们来说存在的意义又是什么?有人说娱乐自我,放松心情;有人说要在影视的虚幻中得到安慰,以此来满足内心的梦魇;还有人回答我,要在别人的人生经历中汲取经验,获取能量……但电影似乎更像一面镜子,是我们人类历史发展的历程射影。无论悲喜,动作,言情,家庭,伦理,科幻,甚至综艺,他以任何形式所表达的任何内容,我们都能在现实生活中找到相应的情感寄托,又或者说,电影,本来就是生活!

                       

          人们会在网络上寻找那些已经在电影院下架的电影,那么,为人们提供好看而又有趣的电影已经有其存在的意义了!而豆瓣中为我们提供了无数的电影,人们既可以从上面寻找电影,也可在上面发表观看电影后的评价,供人们去理解和思考哪些电影是较好看和适合自己的。因此我们在豆瓣上面通过爬虫方式爬取了Top250条电影数据。这上面包括了电影名、图片链接、演员、印象、评分等信息。影片链接 :https://movie.douban.com/top250

    除此之后还根据观众们的喜爱,分析一下各部电影的短评情况!了解该部电影吸引人的地方。

    以下是豆瓣Top的网页结构:分析可知每一页都有25个电影数据,所有电影的数据都是由li标签组合而成的,而我们想获取的内容分别为a、img、p、span标签等组成。

      按电影名与评分排列为:

      

    我们一生中观看的电影数不胜数,但是又有多少部电影能够直戳心灵呢?好的电影能够打动人,也能够影响人的一生。其中肖申克的救赎、霸王别姬、控方证人的评分均为9.6分。是大部分人心目当中的好电影!因此,那些怀旧和想看好电影的人可以去看这三部。

                   

                         肖申克的救赎                                              霸王别姬

    根据评价人数可知,肖申克的救赎和这个杀手不太冷这两部电影的人数最多,表明了他们更加容易影响人们的共鸣和吐槽的点最多。倘若你想寻找这方面的电影可以去看这两部电影。

    urls=['https://movie.douban.com/top250?start={}&filter='.format(str(i)) for i in range(0,100,25)]
    headers={
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36',
    'Cookie':'bid="+RZMojI+I84"; ll="118281"; viewed="7056708_10863574_26647176_3288908"; gr_user_id=7758d24b-1ff7-4bfb-aac5-da0cebb3b129; _ga=GA1.2.1164329915.1430920272; _pk_ref.100001.4cf6=%5B%22%22%2C%22%22%2C1457141967%2C%22https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DwlFfuGH8nDDaDfhuElvs2e-927672lPlTf3UP5ra2LVTDrCK1YcFpyYiIAPJcOqq%26wd%3D%26eqid%3D86da232a00235c820000000356da38c0%22%5D; ps=y; ue="alovera@sina.com"; dbcl2="61719891:SKQE4SmJJ7U"; ck="WzE9"; ap=1; push_noty_num=0; push_doumail_num=0; __utma=30149280.1164329915.1430920272.1457093782.1457141968.44; __utmb=30149280.6.10.1457141968; __utmc=30149280; __utmz=30149280.1457141968.44.23.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; __utmv=30149280.6171; __utma=223695111.1164329915.1430920272.1457093782.1457141968.6; __utmb=223695111.0.10.1457141968; __utmc=223695111; __utmz=223695111.1457141968.6.5.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; _pk_id.100001.4cf6=051573cd37c5bc0e.1446452093.6.1457142204.1457093853.; _pk_ses.100001.4cf6=*'
    }

    title=[]
    image=[]
    actor=[]
    empression=[]
    rate=[]
    evalu_num=[]
    def allfilm(web_url,data=None):
    web_data=requests.get(web_url)
    soup=BeautifulSoup(web_data.text,'html.parser')
    time.sleep(2)
    titles=soup.select('#content > div > div.article > ol > li > div > div.info > div.hd > a')
    images=soup.select('#content > div > div.article > ol > li > div > div.pic > a > img')
    actors=soup.select('#content > div > div.article > ol > li > div > div.info > div.bd > p:nth-of-type(1)')
    empressions=soup.select('#content > div > div.article > ol > li > div > div.info > div.bd > p:nth-of-type(2)')
    rates=soup.select('#content > div > div.article > ol > li > div > div.info > div.bd > div > span.rating_num')
    evalu_nums=soup.select('#content > div > div.article > ol > li > div > div.info > div.bd > div > span:nth-of-type(4)')

    for title1,image1,actor1,empression1,rate1,evalu_num1 in zip(titles,images,actors,empressions,rates,evalu_nums):
    title.append(title1.get_text().replace('\xa0',' ').strip()),
    image.append(image1.get('src')),
    actor.append(actor1.get_text().replace('\xa0',' ').strip()),
    empression.append(empression1.get_text()),
    rate.append(rate1.get_text()),
    evalu_num.append(evalu_num1.get_text())

    for sigle_url in urls:
    allfilm(sigle_url)
    data={'电影名':title,
    '图片链接':image,
    '演员':actor,
    '印象':empression,
    '评分':rate,
    '评价数':evalu_num}
    frame=DataFrame(data,columns=[u'电影名',u'图片链接',u'演员',u'印象',u'评分',u'评价数'])

    根据人们对这100部电影的印象并通过词云的方式显示出来可知,人们对改变、世界、故事、永远这些词语比较关注,电影制作人可以从这些角度分析为什么这些电影的评分比较高,从而创造出更优秀的电影!

     

    主要代码如下:

    sep = '.,:; ! 我们 不是 一个 自己 这样 电影 人生 最好 以为 那些'
    fo = open(r'C:UserszyDesktopzy.txt', 'r', encoding='utf-8')
    text = fo.read()
    fo.close
    text = text.lower()
    for ch in sep:
        text = text.replace(ch, ' ')
    print(text.split())
    a = jieba.lcut(text)
    # print(a)
    wcdict = {}
    
    for word in a:
            if word not in wcdict:
                if len(word) == 1:
                    continue
                else:
                    wcdict[word] = wcdict.get(word, 0) + 1
    
    wails = list(wcdict.items())
    wails.sort(key=lambda x: x[1], reverse=True)
    
    cut_text = " ".join(a)
    'print(cut_text)'
    mywc = WordCloud(font_path='msyh.ttc').generate(cut_text)
    plt.imshow(mywc)
    plt.axis("off")
    plt.show()
    for i in range(20):
        print(wails[i])

    摘不到的星星,总是最闪亮的。 溜掉的小鱼,总是最美丽的。 错过的电影,总是最好看的。 这或许是大部分人的感受吧!为了能够寻找到那遗失的美好,我们就从那一部部“古老而又动情”的电影开始吧。

     爬取完豆瓣电影排行之后,我们来分析下电影的短评。每个人的经历不同,看完的电影感受不同。

    这里列出Top250电影中的第一名肖申克的救赎的影评,包括昵称、评分、日期、评论。

    其中给5星好评的人是最多的,其次是4星好评的!这也与我们Top250排行第一所得到的结论是相同的!表明其实在是一部不可多得的好电影。

    分析其短评所生成的词云,我们也可大概所其所想表达的主题!

    主要代码如下:

    def fillCommentsDatas(data, html):
        soup = BeautifulSoup(html, 'lxml')
        divs = soup.find_all('div', attrs={'class': 'comment-item'})
        for div in divs:
            if isinstance(div, bs4.element.Tag):
                nickname = div.find('a', attrs={'title': True}).get('title')
                StarandDate = div.find_all('span', attrs={'title': True})
                if len(StarandDate) == 2:
                    star = float(re.findall('allstar(dd).*?', str(StarandDate[0]))[0]) / 10
                    date = StarandDate[1].get('title')
                else:
                    star = ""
                    date = StarandDate[0].get('title')
                comment = div.find('span', attrs={'class': 'short'}).string.strip()
                data[nickname] = [date, star, comment]
    def write_to_excel(data):
        # 新建一个excel文件
        workbook = xlwt.Workbook(encoding='ascii')
        # 新建一个worksheet
        worksheet = workbook.add_sheet('BookSheet')
        # 设置表格的宽度
        worksheet.col(0).width = 4000
        worksheet.col(1).width = 3000
        worksheet.col(2).width = 8000
        worksheet.col(3).width = 30000
        # 初始化样式
        style = xlwt.XFStyle()
        font = xlwt.Font()
        font.name = "宋体"
        font.height = 11 * 20
        # 新建alignment 样式设置
        alignment = xlwt.Alignment()
        # 设置行居中
        alignment.horz = xlwt.Alignment.HORZ_CENTER
        # 设置列居中
        alignment.vert = xlwt.Alignment.VERT_CENTER
        alignment.wrap = 1
        style.font = font
        style.alignment = alignment
        worksheet.write(0, 0, "昵称", style)
        worksheet.write(0, 1, "评分", style)
        worksheet.write(0, 2, "日期", style)
        worksheet.write(0, 3, "评论", style)
        tmp = 1
        for key, value in data.items():
            worksheet.write(tmp, 0, key, style)
            worksheet.write(tmp, 1, value[1], style)
            worksheet.write(tmp, 2, value[0], style)
            worksheet.write(tmp, 3, value[2], style)
            tmp += 1
    
        workbook.save('影评.xls')
    

    结论:通过本次项目,使我对自己有了更加清晰的认识。对python等的知识点有了更加深刻的了解和认识!虽有进步,但仍有不足之处!望能够继续加油,争取自己有更大的进步!

  • 相关阅读:
    Oracle简述
    如何用jQuery实现五星好评
    Java中的集合概述
    js关卡函数,throat函数实现,定时运行函数
    js图的数据结构处理----普里姆算法
    js图的数据结构处理---弗洛伊德算法
    js图的数据结构处理---迪杰斯特拉算法
    js图的数据结构处理----邻链表,广度优先搜索,最小路径,深度优先搜索,探索时间拓扑
    js树形结构-----(BST)二叉树增删查
    js模拟散列
  • 原文地址:https://www.cnblogs.com/zy5250/p/10786882.html
Copyright © 2020-2023  润新知