【代码片段】使用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,请谨慎操作。

相关文章
|
3天前
|
存储 SQL 数据库
超级实用的python代码片段汇总和详细解析(16个)(下)
超级实用的python代码片段汇总和详细解析(16个)
39 0
|
3天前
|
数据采集 Python
爬虫实战-Python爬取百度当天热搜内容
爬虫实战-Python爬取百度当天热搜内容
76 0
|
3天前
|
数据采集 Web App开发 iOS开发
爬取B站评论:Python技术实现详解
爬取B站评论:Python技术实现详解
|
3天前
|
XML 数据格式 Python
【代码片段】【Python】XML 字符串格式化打印
【代码片段】【Python】XML 字符串格式化打印
18 0
|
3天前
|
存储 JSON API
超级实用的python代码片段汇总和详细解析(16个)(上)
超级实用的python代码片段汇总和详细解析(16个)
23 0
|
3天前
|
数据采集 Web App开发 开发者
探秘Python爬虫技术:王者荣耀英雄图片爬取
探秘Python爬虫技术:王者荣耀英雄图片爬取
|
3天前
|
人工智能 机器人 数据挖掘
【python】电影评分数据集的分析(python实现)(源码+报告)【独一无二】
【python】电影评分数据集的分析(python实现)(源码+报告)【独一无二】
|
3天前
|
人工智能 机器人 数据挖掘
【python】电影评分数据集的分析(python实现)(源码+报告)【独一无二】
【python】电影评分数据集的分析(python实现)(源码+报告)【独一无二】
|
3天前
|
机器学习/深度学习 数据采集 算法
基于Apriori关联规则的电影推荐系统(附python代码)
这是一个基于Apriori算法的电影推荐系统概览。系统通过挖掘用户评分数据来发现关联规则,例如用户观看某部电影后可能感兴趣的其他电影。算法核心是逐层生成频繁项集并设定最小支持度阈值,之后计算规则的置信度。案例中展示了数据预处理、频繁项集生成以及规则提取的过程,具体包括用户评分电影的统计分析,如1-5部电影的评分组合。最后,通过Python代码展示了Apriori算法的实现,生成推荐规则,并给出了一个简单的推荐示例。整个过程旨在提高推荐的精准度,基于用户已评分的电影推测他们可能尚未评分但可能喜欢的电影。
基于Apriori关联规则的电影推荐系统(附python代码)
|
3天前
|
数据采集 存储 数据处理
使用Python爬取豆瓣电影影评:从数据收集到情感分析
本文演示如何使用Python爬虫获取豆瓣电影《肖申克的救赎》的影评数据并进行情感分析。首先,安装requests、BeautifulSoup、pandas和TextBlob库。接着,编写爬虫抓取评论的用户名、评分和内容,存储为DataFrame。然后,利用TextBlob进行情感分析,得到情感分数。此方法有助于分析用户对电影的反馈。
130 1