【代码片段】使用python爬取豆瓣电影TOP250

简介: 使用python爬取豆瓣电影TOP250

使用python爬取豆瓣电影TOP250

import os
import re
import time
import json
import requests

from bs4 import BeautifulSoup

# 爬取分页数据
def douban_page(page_url):
    response = requests.get(page_url)
    if response.status_code == 200:
        soup = BeautifulSoup(response.text, "html.parser")

        grid_view = soup.find(class_="grid_view")
        grid_view_items = grid_view.find_all("li")

        page_list = []
        for item in grid_view_items:
            # 大部分电影标题栏有两个title标签和一个other标签
            # 但部分电影只有一个title标签,比如top2《霸王别姬》
            titles = item.find_all(class_="title")
            name = titles[0].get_text().strip() # 电影名称
            if len(titles) >= 2:
                alias = titles[1].get_text().strip(" / ") # 电影别名
            else:
                alias = ""

            # 提取电影年份、地区、类型等信息
            p_elem = item.find(class_="bd").find("p", class_="")
                        p_strs = re.findall(r'(.*?)', p_elem.prettify(), re.S)
            p_str = p_strs[0].strip("\n") # 出去两边换行符

            p_items = p_str.split(" / ") # 电影年份、地区、类型分割为列表

            film_year = p_items[0].strip()     # 年份
            film_district = p_items[1]         # 地区
            film_genre = p_items[2].split() # 分类

            # 获取描述(不是全部电影都有描述,比如top239《功夫》,top254《奇迹男孩》)
            quote_elem = item.find(class_="quote")
            if quote_elem:
                description = quote_elem.find(class_="inq").get_text()
            else:
                description = ""

            page_list.append({
                "name": name,
                "alias": alias,
                "year": film_year,
                "genre": film_genre,
                "district": film_district,
                "sort": item.em.text, # 排序
                "link": item.a["href"], # 详情地址
                "score": item.find(class_="rating_num").get_text(), # 评分
                "description": description # 描述(评价)
            })

        return page_list
    return []

# 开始爬取,计算分页
def douban_begin():
    page_number = 1 # 起始页
    page_limit = 25 # 每页显示条数

    film_list = []
    while page_number <= 10:
        page_offset = (page_number - 1) * page_limit # 计算当前页起始条数
        page_url = "https://movie.douban.com/top250?start=%s" % page_offset
        page_list = douban_page(page_url)

        # 把分页结果放入列表
        for item in page_list:
            film_list.append(item)

        page_number += 1
        time.sleep(2) # 休眠2秒防止频繁执行

    return film_list

if __name__ == "__main__":
    film_list = douban_begin()

    # 数据以文件形式保存到本地
    fileObj = open("json/douban_film.json", "w")
    fileObj.write(json.dumps(film_list))
    fileObj.close()
    exit()

注:爬取页面之前需要先分析页面,找到自己需要的数据信息。该代码只是把爬取结果放到了本地文件,可以根据自己的需求存到数据库等合适的位置。
最后:豆瓣会封禁IP,请谨慎操作。

相关文章
|
28天前
|
机器学习/深度学习 数据采集 搜索推荐
利用Python和机器学习构建电影推荐系统
利用Python和机器学习构建电影推荐系统
51 1
|
3月前
|
机器学习/深度学习 数据采集 TensorFlow
使用Python实现深度学习模型:智能电影制作与剪辑
使用Python实现深度学习模型:智能电影制作与剪辑
88 5
|
4月前
|
数据采集 存储 机器学习/深度学习
豆瓣评分7.6!Python大牛教你如何采集网络数据
网络数据采集大有所为。在大数据深入人心的时代,网络数据采集作为网络、数据库与机器学习等领域的交汇点,已经成为满足个性化网络数据需求的最佳实践。你在浏览器上看到的内容,大部分都可以通过编写Python 程序来获取。如果你可以通过程序获取数据,那么就可以把数据存储到数据库里。如果你可以把数据存储到数据库里,自然也就可以将这些数据可视化。 今天给小伙伴们分享的这份手册采用简洁强大的Python语言,介绍了网络数据采集,并为采集新式网络中的各种数据类型提供了全面的指导。
|
4月前
|
XML 程序员 数据格式
豆瓣评分8.6!Python社区出版的Python故事教程,太强了!
Python 是活力四射的语言,是不断发展中的语言。就连使用 Python 多年的行者也不敢说对 Python 的方方面面都了解并可以自由运用,想必读者可能更加无法快速掌握所有重点技巧了。 今天给小伙伴们分享的这份手册是用互动的开发故事来探讨Pyfhonic开发的故事书籍,是一本Python语言详解书籍,由Python的行者根据自身经验组织而成,是为从来没有听说过Python的其他语言程序员准备的一份实用的导学性质的书,笔者试图将优化后的学习体验,通过故事的方式传达给读者。对于零基础的小白来说更建议入门后再来品读。
|
4月前
|
存储 JSON 算法
豆瓣评分9.4!最适合Python入门后进阶的Python食谱!
Python是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Python的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。
|
4月前
|
XML 程序员 数据格式
豆瓣评分8.6!Python社区出版的Python故事教程,太强了!
Python 是活力四射的语言,是不断发展中的语言。就连使用 Python 多年的行者也不敢说对 Python 的方方面面都了解并可以自由运用,想必读者可能更加无法快速掌握所有重点技巧了。 今天给小伙伴们分享的这份手册是用互动的开发故事来探讨Pyfhonic开发的故事书籍,是一本Python语言详解书籍,由Python的行者根据自身经验组织而成,是为从来没有听说过Python的其他语言程序员准备的一份实用的导学性质的书,笔者试图将优化后的学习体验,通过故事的方式传达给读者。对于零基础的小白来说更建议入门后再来品读。
|
4月前
|
程序员 测试技术 开发工具
豆瓣评分7.9!世界级讲师耗时5年整理出的Python学习手册!
Python是一门流行的开源编程语言,广泛用于各个领域的独立程序与脚本化应用中。它不仅免费、可移植、功能强大,同时相对简单,而且使用起来充满乐趣。从软件业界的任意一角到来的程序员,都会发现Python着眼于开发者的生产效率以及软件质量,因此无论你的项目是大还是小,选择Python都将带来战略性的优势。 今天给小伙伴们分享的这份手册讲述了完整的Python语言,力争满足“语言”和“原理”两个方面的需求,并拥有足够的深度以便实用。废话不多说,下面展示给大家。
|
4月前
|
前端开发 JavaScript 关系型数据库
基于Python+Vue开发的电影订票管理系统
该项目是基于Python+Vue开发的电影订票管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的电影订票管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
30 1
|
4月前
|
算法 数据挖掘 数据处理
豆瓣评分8.7!Python pandas创始人亲码的数据分析入门手册!
在众多解释型语言中,Python最大的特点是拥有一个巨大而活跃的科学计算社区。进入21世纪以来,在行业应用和学术研究中采用python进行科学计算的势头越来越猛。 近年来,由于Python有不断改良的库(主要是pandas),使其成为数据处理任务的一大代替方案,结合其在通用编程方面的强大实力,完全可以只使用Python这一种语言去构建以数据为中心的应用程序。 作为一个科学计算平台,Python的成功源于能够轻松的集成C、C++以及Fortran代码。大部分现代计算机环境都利用了一些Fortran和C库来是西安线性代数、优选、积分、快速傅里叶变换以及其他诸如此类的算法。
|
4月前
|
数据采集 存储 前端开发
豆瓣评分9.0!Python3网络爬虫开发实战,堪称教学典范!
今天我们所处的时代是信息化时代,是数据驱动的人工智能时代。在人工智能、物联网时代,万物互联和物理世界的全面数字化使得人工智能可以基于这些数据产生优质的决策,从而对人类的生产生活产生巨大价值。 在这个以数据驱动为特征的时代,数据是最基础的。数据既可以通过研发产品获得,也可以通过爬虫采集公开数据获得,因此爬虫技术在这个快速发展的时代就显得尤为重要,高端爬虫人才的收人也在逐年提高。