豆瓣电影TOP250数据分析

本文使用的语言为Python, 用到的几个模块有:BeautifulSoup(爬数据),pandas(数据处理),seaborn(可视化),部分图表由Tableau生成。


1. 数据获取

计划要抓取的字段包括:片名,导演,年份,国别,评分,评价数量,看过数量,想看数量,短评数量,长评数量。

需要抓取的影片信息有250条,每页25部影片,一共有10页。简单浏览网页不难发现,翻页的链接不需要从页面底端抓取,直接修改url参数即可。
在这里插入图片描述
例如,第二页的url只需要在base url后面加上?start={start}&filter=即可。因此,第一步的任务就是抓取榜单上的每一部电影的详细信息链接即可。同时,影片的排名信息也可以通过简单计数得到,不需要从页面中抓取。具体代码如下。

import requests
from bs4 import BeautifulSoup
from time import sleep
from csv import DictWriter
base_url = r'https://movie.douban.com/top250'
records = []
for start in [x*25 for x in range(10)]:
    #Every single page
    url = base_url+f'?start={start}&filter='
    response = requests.get(url).text
    soup = BeautifulSoup(response,'html.parser')
    movies = soup.find(class_='grid_view').find_all('li')
    rank=1+start
    for movie in movies:
        #Every single movie on the page
        movie_link = movie.find(class_='info').find(class_='hd').find('a')['href']
        movie_dict = {'rank':rank, 'link':movie_link}
        records.append(movie_dict)
        rank += 1

这样我们就得到了一个list, list中有250个dictionary,每个dictionary中有影片在榜单中的排名和影片详细信息页面链接。

下一步就是进一步从已经得到的链接中抓取影片的详细信息。具体代码如下,仔细分析html标签做简单的测试即可。注意,爬取数据的过程中要加上sleep(5),礼貌爬取,防止IP被封。

#Use the scapped link to further scrape movie details
for record in records:
    rank = record.get('rank')
    print(f'Scarpping rank {rank} of 250')
    link = record.get('link')
    response = requests.get(link).text
    soup = Beau
  • 5
    点赞
  • 110
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值