欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

围观 2W+ 豆瓣电影分类列表(附代码)

最编程 2024-04-04 09:13:32
...

前言


       之前向各位网友分享过一篇文章《【干货】-- 带你抓取并分析知乎高评分电影》,是关于如何从知乎网站中抓取经网友整理好后的电影信息,说白了是在网友汇总的基础上做了数据的爬虫工作。今天就来手把手的分享一篇关于如何直接从豆瓣网中抓取所有电影(2万多部)的评分信息,希望对热爱看电影的小伙伴有所帮助,减少不知道看啥电影的困惑。首先来看一下“豆瓣电影排行榜”的主页截图:

0?wx_fmt=png


       会发现,在主页中的左侧包含了各式各样的电影类型,如剧情、喜剧、爱情和动作等。当我任意点击一个类型,就会出现如下的截图,以剧情类电影为例:

0?wx_fmt=png

       在上面的截图中,有我们需要抓取的每部电影的信息,如电影名称、电影评分、参与评论的人数等。按照一般的爬虫顺序,会首先查看电影信息页的源代码,即按一下F12键,然后点击电影名称,获得其所属的标记。如下图所示:

0?wx_fmt=png


       虽然找到了标题所属的“span”下面的“a”标签,但是当你去爬虫时,却没有任何返回的结果。究其原因,发现原来电影相关的数据并没有直接存储在HTML源代码中,而是异步存储在了json文件中。如下图所示:

# 剧情类电影主页url = 'https://movie.douban.com/typerank?type_name=剧情&type=11&interval_id=100:90&action='# 发送请求res = requests.get(home, headers = headers).text# 解析请求后的响应信息soup = BeautifulSoup(res,'html.parser')# 按照标记爬取电影名称soup.findAll('span',{'class':'movie-name-text'})

根据标记查不到内容

0?wx_fmt=png

异步存储

0?wx_fmt=png

异步存储的链接

0?wx_fmt=png

链接的内容(电影信息)

0?wx_fmt=png


从这个异步存储的链接中我们会发现,只需要改动链接中的几个值就可以获得其它类型的电影信息。其中第一个红框控指的是电影类型,第二个红框控指的是电影排名的百分比,如前10%的电影(即90%~100%),第三个红框指的是页面显示多少部电影,这里不妨设置1000部电影(虽然10%比例的电影只有600左右部)。

0?wx_fmt=png

数据采集—电影数据


       知道了该如何抓取豆瓣电影的步骤后,我们直接上代码,代码中每一步都给出了解释,感兴趣的读者可以仔细研究并操作:

# ========== Python3 + Jupyter ========== ## ==================== 步骤一 抓取所有电影的类型id ==================== ## 导入第三方包import requestsfrom bs4 import BeautifulSoupimport pandas as pdimport timeimport re# 设置头文件,用于反爬虫headers = {'Accept':'*/*','Accept-Encoding':'gzip, deflate, br',            'Accept-Language':'zh-CN,zh;q=0.8',                'Connection':'keep-alive',                'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36'}            # 根据豆瓣主页抓取各个电影的类型IDhome = 'https://movie.douban.com/chart'res = requests.get(home, headers = headers).text
soup = BeautifulSoup(res,'html.parser')# 通过正则表达式获取每个电影类型的idtype_id = re.findall('type=(.*?)&amp',                      str(soup.findAll('div',{'class':'types'})[0]))                     # ==================== 步骤二 根据异步存储的链接规律,生成所有的抓取链接 ==================== ## https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&start=0&limit=20# 根据url的规律,生成抓取数据的目标urlurls = []for num in type_id:        for i in range(100,-10,-10):
        urls.append('https://movie.douban.com/j/chart/top_list?type='+num+'&interval_id='+str(i)+'%3A'+str(i-10)+'&action=&start=0&limit=100')# ==================== 步骤三 抓取电影信息 ==================== ## 构建空列表,用于存储爬虫的数据信息title = []types = []
regions = []
date = []
actor_count = []
score = []
vote_counts = []
actors = []# 通过for循环抓取每一页电影的信息for url in urls:
    res = requests.get(url, headers = headers).text        # 通过正则表达式完成数据的扣取
    title.extend(re.findall('"title":"(.*?)",', res))
    types.extend(re.findall('"types":\[(.*?)\],', res))
    regions.extend(re.findall('"regions":\[(.*?)\],', res))
    date.extend(re.findall('"release_date":"(.*?)",', res))
    actor_count.extend(re.findall('"actor_count":(.*?),', res))
    score.extend(re.findall('"score":"(.*?)",', res))
    vote_counts.extend(re.findall('"vote_count":(.*?),', res))
    actors.extend(re.findall('"actors":\[(.*?)\],', res))            # 每隔3秒抓取一页数据
    time.sleep(3)    # 将抓取下来的数据存放到字典中    data_dict = {'title':title,'types':types,'regions':regions,             'date':date,'actor_count':actor_count,'score':score,             'vote_counts':vote_counts,'actors':actors}            # ==================== 步骤四 数据的存储 ==================== #     # 将数据存储为数据框结构df = pd.DataFrame(data_dict)# 数据导出df.to_excel('films_info.xlsx', index = False)

       到此为止,我们就完成了“豆瓣电影分类排行榜”所有数据的采集,我们简单看一下爬虫后的输出效果:

0?wx_fmt=png

结语


       OK,今天关于“豆瓣电影分类排行榜”的爬虫,我们就分享到这里,喜欢看电影的你还不赶快试试!!如果你有问题,欢迎在公众号的留言区域表达你的疑问。同时,也欢迎各位朋友继续转发与分享文中的内容,让跟多的人学习和操作。最后,本文相关的Python脚本和PDF版本已存放到百度云盘,可以通过下面的链接获取

链接: https://pan.baidu.com/s/1miwvW6k 密码: wnp5


每天进步一点点2015

学习与分享,取长补短,关注小号!

640?wx_fmt=jpeg
长按识别二维码 马上关注