爬虫综合大作业

作业要求来自: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:\Users\zy\Desktop\zy.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(\d\d).*?', 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等的知识点有了更加深刻的了解和认识!虽有进步,但仍有不足之处!望能够继续加油,争取自己有更大的进步!

转载于:https://www.cnblogs.com/zy5250/p/10786882.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值