爬取豆瓣电影,存储到mysql中,并进行数据分析

1.爬取豆瓣前250部电影

由于电豆瓣电影中一共存在250部电影,需要进行分页,每隔25进行一次分页截取。

# 构造分页数字列表
page_indexs = range(0, 250, 25)

headers表头为:

headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.4098.3 Safari/537.36',
    'Cookie': 'douban-fav-remind=1; bid=xV3mzxZaZxE; _pk_ref.100001.4cf6=%5B%22%22%2C%22%22%2C1558577880%2C%22https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DV45iHCRmrzprwRNYFC4Tj2b6lo3J1MbSYFIzkgsyd9EERM6EE6OIaTGDe9z7NaJj%26wd%3D%26eqid%3Db8eae7580058b189000000025ce602d1%22%5D; _pk_id.100001.4cf6=cf9fd67f-eed2-4398-a10d-333daee6b8b7.1558577880.1.1558577880.1558577880.; _pk_ses.100001.4cf6=*; __utma=30149280.1353623796.1524120262.1556333363.1558577881.8; __utmb=30149280.0.10.1558577881; __utmc=30149280; __utmz=30149280.1558577881.8.7.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; __utma=223695111.2144420921.1558577881.1558577881.1558577881.1; __utmb=223695111.0.10.1558577881; __utmc=223695111; __utmz=223695111.1558577881.1.1.utmcsr=baidu|utmccn=(organic)|utmcmd=organic'
}

信息都存在于div.info中,使用response读取数据,以列表形式读取存储到lists,其中包括了name,year,country,category,star,people_num的信息 。其中详细的演员信息需要单独读取。

def get_movie_list(url,headers):
    soup = requests.get(url,headers=headers)
    response = BeautifulSoup(soup.text,'lxml')
    lists = response.select('div.info')
    datas = []
    for list in lists:
        sing_url =list.select('a')[0].get('href')
        name =list.select('div.hd .title')[0].text
        type_list = list.select('div.bd p')[0].text.strip('').split('...')[-1].replace(' ','').split('/')
        year =''.join(type_list[0].split())
        country = ''.join(type_list[1].split())
        category = ''.join(type_list[2].split())
        star = list.select('div.bd .star .rating_num')[0].text.replace(' ','')
        people_num = list.select('div.bd .star span:nth-of-type(4)')[0].text.split('人')[0]
        data = get_detail_movie(sing_url,name,year,country,category,star,people_num,headers)
        datas.append(data)
    for info in datas:
        if '导' in info['year']:continue
        else:
            print(info)
            mv_mysql.save_data(info)

其中get_detail_movie函数用来单独读取演员信息。

def get_detail_movie(movie_url,name,year,country,category,star,people_num,headers):
    response = requests.get(movie_url,headers = headers)
    soup = BeautifulSoup(response.text,'lxml')
    # daoyan =soup.select('#info > span:nth-of-type(1) > span.attrs')[0].text
    yanyuan =[]
    for i in soup.select('#info > span.actor > span.attrs'):
        yanyuan.append(i.text.replace('/',''))

    list1 =str(yanyuan).replace('[','').replace("'",'').split(' ')
    yanyuan = ' '.join(list1)
    data ={'name':name,
           'year':year,
           'country':country,
           'category':category,
           'star':star,
           'people_num':people_num,
           # 'daoyan':daoyan,
           'yanyuan':yanyuan
           }
    return data

对于信息本文采用mysql数据库存储,采用pymysql,安装比较简单。

import pymysql

首先需要连接到MYSQL数据库中。

#连接MYSQL数据库
db = pymysql.connect("host","usr","password","database" )
cursor = db.cursor()

其中host我选择是自己的主机,usr是你登录mysql数据库用户名,password你的密码,database是你数据库名。
在数据库中建表

def creat_table():
    cursor.execute("DROP TABLE IF EXISTS DBDY_250")
    sql = '''CREATE TABLE DBDY_250(
               name text(5000),
               year VARCHAR(1000),
               country text(5000),
               category text(5000),
               star VARCHAR(1000),
               people_num VARCHAR(1000),
               # daoyan text(5000),
               yanyuan text(5000)
            );'''
    cursor.execute(sql)
    return

建立的表中,表名为DBDY_250,存储爬取到的数据:

#存储爬取到的数据
def save_data(data_dict):
    sql = '''INSERT INTO DBDY_250(name,year,country,category,star,people_num,yanyuan) VALUES(%s,%s,%s,%s,%s,%s,%s)'''
    value_tup = (data_dict['name']
                 ,data_dict['year']
                 ,data_dict['country']
                 ,data_dict['category']
                 ,data_dict['star']
                 ,data_dict['people_num']
                 # ,data_dict['daoyan']
                 ,data_dict['yanyuan']
                 )
    try:
        cursor.execute(sql,value_tup)
        db.commit()
    except:
        print('数据库写入失败')
    return

爬取到的文件格式如下:
在这里插入图片描述
后续爬取信息会进行数据分析,可视化分析,可以期待一下。需要代码的在评论区留言哦!谢谢,记得点赞哦。

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 豆瓣电影是众所周知的一个知名电影评分网站,其的TOP250电影榜单更是备受关注。爬取这个榜单的数据可以帮助我们更好地了解电影市场和评价,数据可视化方面可以更好地呈现这些数据。 首先,我们可以使用Python程序编写爬虫,抓取豆瓣电影TOP250的数据。我们可以通过分析网页源代码,选取需要的信息,例如电影名称、上映时间、豆瓣评分、评分人数、电影类型、导演、演员等信息。然后,将所有信息保存在CSV文件。我们可以使用BeautifulSoup模块或Scrapy框架来实现爬虫程序的编写。 接下来,我们可以使用Python的数据可视化工具来对这些数据进行可视化处理。例如,我们可以使用matplotlib或Seaborn绘制电影评分的统计图表和线型图,了解每部电影评分的分布情况、评分人数的多寡、豆瓣评分的走向等。另外,我们也可以绘制散点图或热图,从电影类型、上映时间等角度分析不同类型电影的评分情况。我们还可以利用词云图工具呈现电影的标签云图,更直观地展示豆瓣用户对电影的评价。 总的来说,我们可以使用Python的爬虫和数据可视化工具来爬取豆瓣电影TOP250榜单的数据,并且将数据以图表、统计、云图等形式进行可视化分析,从而更好地了解电影市场和评价。 ### 回答2: 豆瓣电影Top250是电影爱好者们都很熟悉的一个电影排行榜。为了更好地了解这个排行榜的情况,我们可以利用Python爬取豆瓣电影Top250上的电影信息,并将数据制作成可视化图表,以更直观地呈现数据。 首先,我们需要使用Python爬虫技术获取豆瓣电影Top250每部电影的信息。一般来说,爬取网页数据需要用到一些第三方爬虫库,比如Requests和BeautifulSoup。使用Requests库可以向豆瓣服务器发送请求,获取Top250的网页HTML文件。接着,我们可以使用BeautifulSoup库解析HTML文件,从获取每一部电影的名称、评分、演员、导演、简介等信息。爬取完毕后,将获取到的数据存储MySQL或者MongoDB数据库,方便后续对数据的处理和分析。 接下来,我们需要将获取到的数据进行数据可视化。我们可以使用Python的Matplotlib或者Seaborn等数据可视化库来制作可视化图表。比如,我们可以生成柱状图、饼图、折线图等多种图表类型,展现Top250电影各类别的数量分布、电影评分的分布情况、导演、演员等数据的贡献度等信息。 总之,通过Python爬取豆瓣电影Top250数据,并利用数据可视化技术制作图表,我们可以更好地了解电影市场的情况,从找到一些有用的数据洞察点,对后续的电影市场分析等工作提供有力支持。 ### 回答3: 随着互联网的普及和数据挖掘的发展,数据可视化已经成为当今最流行的技术之一。而Python语言的出现,极大地促进了数据可视化技术的发展,并且能够使数据可视化更加高效、便捷。 Python爬取豆瓣电影Top250数据可以使用爬虫框架Scrapy,通过对网页的解析和内容抓取,将所需数据存入数据集。数据集存储了每个电影的名称、导演、主演、类型、上映时间、评价人数、评分等信息,这些数据可以通过Python的数据可视化工具如Matplotlib、Pandas等进行可视化处理。 通过数据可视化可以得到丰富的数据分析和呈现,如: 1.不同类型电影的数量 通过Python可视化工具可以得到不同类型电影的数量,并且可以使用饼图、柱状图等图表进行图像展示,帮助人们更好地了解豆瓣Top250电影各类型的分布情况。 2.电影排名及评价情况 通过Python爬虫框架获取的豆瓣Top250电影可以进行排名展示及评价等数据的分析。可视化工具可以帮助我们通过散点图、折线图等形式直观地了解电影排名及评价情况。 3.电影时长对评分的影响 通过Python可视化工具可视化处理电影时长对评分的影响。可以得出电影时长对于电影评分存在明显影响的结论,以饼图的形式将主观评价高的电影与电影时长进行对比。 Python爬取豆瓣电影Top250,通过数据可视化工具可以使我们直观地了解到豆瓣Top250电影的分类情况、排名和评价等数据信息,同时,也可以了解到电影时长等因素对电影评价的影响,这对我们对电影的分析与推荐可以起到积极的作用,有助于我们更好地了解电影行业的情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值