爬虫综合大作业

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

一.把爬取的内容保存取MySQL数据库

  • import pandas as pd
  • import pymysql
  • from sqlalchemy import create_engine
  • conInfo = "mysql+pymysql://user:passwd@host:port/gzccnews?charset=utf8"
  • engine = create_engine(conInfo,encoding='utf-8')
  • df = pd.DataFrame(allnews)
  • df.to_sql(name = ‘news', con = engine, if_exists = 'append', index = False)

 

二.爬虫综合大作业

  1. 选择一个热点或者你感兴趣的主题。
  2. 选择爬取的对象与范围。
  3. 了解爬取对象的限制与约束。
  4. 爬取相应内容。
  5. 做数据分析与文本分析。
  6. 形成一篇文章,有说明、技术要点、有数据、有数据分析图形化展示与说明、文本分析图形化展示与说明。
  7. 文章公开发布。

爬取目标:爬取豆瓣top250的电影

豆瓣top250的网页结构:

 

 

可以看出该网页的数据是分别以item,info,bd,star..等等来命名的class

所以我们可以通过class爬取他们的属性

代码如下:

# -*- coding: utf-8 -*-
import requests
from lxml import etree


if __name__ == '__main__':
    ranks=[]
    names=[]
    directors=[]
    types=[]
    juqing=[]
    stars=[]
    dd=[]
    gg=[]
    people=[]
    grades=[]
    quotes=[]
    numbers=['0','25','50','75','100','125','150','175','200','225']
    for number in numbers:
        url = 'https://movie.douban.com/top250?start={}&filter='.format(number)#实现翻页功能
        
        headers = {
            "User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
        }
        req = requests.get(url = url,headers = headers)
        req.encoding = 'utf-8'
        html = req.text
        html1=etree.HTML(html)
        rank=html1.xpath('//div[@class="item"]/div/em/text()')#x-path地址并获取文字
        for rank1 in rank:
            ranks.append(rank1)
        name=html1.xpath('//div[@class="info"]/div[1]/a/span[1]/text()')
        for name1 in name:
            names.append(name1)
        director=html1.xpath('//div[@class="bd"]/p[1]/text()')
        for director1 in director:
            directors.append(director1)
        
        people1=html1.xpath('//div[@class="star"]/span[4]/text()')
        for people2 in people1:
            people.append(people2)
        grade=html1.xpath('//div[@class="star"]/span[@class="rating_num"][@property="v:average"]/text()')
        for grade1 in grade:
            grades.append(grade1)
        
        
        
        quote=html1.xpath('//p[@class="quote"]/span/text()')
        for quote1 in quote:
            quotes.append(quote1)
        
        
        
        for i in directors:
            gg.append(i.strip())
        for k in gg:
            dd.append("".join(k.split()))
        
        for q in range(25):
            juqing.append(dd[2*q-1])
        for q in range(25):
            stars.append(dd[2*q])
    
import pandas as pd
#字典中的key值即为csv中列名
columns1= ['豆瓣排名','电影名','剧情','导演/主演','评分','评价人数','queto']#csv会按首字母进行排序,所以加表格自己排序
dataframe = pd.DataFrame({'豆瓣排名':ranks,'电影名':names,'剧情':juqing,'导演/主演':stars,'评分':grades,'评价人数':people,'queto':quotes})
#dataframe = pd.DataFrame({'类型':types})
#将DataFrame存储为csv,index表示是否显示行名,default=True
dataframe.to_csv("豆瓣电影top250.csv",encoding="utf_8_sig",index=False,columns=columns1)

 

生成的CSV文件

 文件分析:

1. 可以看出剧情类的电影在TOP250中的数量是最多的,也就是说比较多人偏向纯剧情类型的电影,还有20部电影是剧情音乐类型的,也是会有挺多人的喜欢看得

2. 犯罪剧情奇幻悬疑,剧情爱情家庭,战争西部片,比较少好的电影,也比较少人看,也有部分的喜剧类电影比较少人看,比如犯罪类型和家庭类喜剧。

3. 从上图也可以看出来在1994年的电影占豆瓣TOP250比较多的比例,一共32部电影入选。1975和1991年就比较少了,只有1部电影,13和15年亦是如此只有一部电影可以进入豆瓣TOP250

4. 从上图可以分析得出,在豆瓣TOP250中,美国的电影是占了大部分的,250部电影里就有105部电影,可以说美国在电影产业是遥遥领先的,而中国总共只有30部电影榜上有名,看来中国的电影产业有待发展

5. 美国在1994年,电影行业迅速发展,一下子有22部电影可以进入豆瓣YOP250。而在中国台湾就比较惨淡了,只有一部电影可以进入豆瓣TOP250。在1994年之后全球的电影又回到平平淡淡的时期了

 

6.  我们从所有的评分人数统计可以看出,大多数人会是比较中肯,都会评价8.7或者8.8 分,而且越往两边就人数越少。

7. 犯罪类型和喜剧类型收获过最高分9.6分,看来大家还是比较喜欢看犯罪类型的电影去寻求一些刺激。

 

posted @ 2019-04-28 20:11  黄津霖  阅读(251)  评论(0编辑  收藏  举报