当前位置: 首页 > news >正文

Python爬取豆瓣电影全部分类数据并存入数据库

        在当今数字化的时代,网络上丰富的影视资源信息吸引着众多开发者去挖掘和利用。今天,我就来和大家分享一段有趣的代码,它能够从豆瓣电影平台获取相关数据并存储到数据库中哦。

结果展示(文末附完整代码):

目录

结果展示(文末附完整代码):

一、代码准备

二、Douban 类的初始化

1. 请求头设置

2. Cookie 设置

3. 数据库连接

三、获取电影种类相关数据

1. 初始请求

2. 进一步处理

四、解析并存储数据

1. 请求数据

2. 数据处理与存储

 完整代码:


一、代码准备

        首先,我们看到这段代码开头进行了一系列的导入操作。它引入了像 re(用于正则表达式处理)、pymysql(用于与 MySQL 数据库进行交互)、requests(方便发送 HTTP 请求)以及 lxml(用于解析 HTML 等)这些非常实用的库。

# -*- coding:utf-8 -*-
import re
import pymysql
import requests
from lxml import etree

二、Douban 类的初始化

        接下来,定义了一个名为 Douban 的类。在这个类的初始化方法 __init__ 中,做了很多重要的设置。

1. 请求头设置

        设置了 headers,这里面包含了各种关于请求的信息,比如接受的内容类型、语言偏好、缓存控制等等。这些设置能够让我们的请求更符合豆瓣服务器的要求,顺利获取到数据。例如:

self.headers = {"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7","accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",// 其他设置省略
}

2. Cookie 设置

        同时,也配置了 cookies,这些是在之前与豆瓣网站交互过程中可能留下的一些标识信息,对于后续请求获取准确数据也起到了一定的作用哦。比如:

self.cookies = {"_pk_id.100001.4cf6": "f993e3f352d610f5.1712975414.","__gads": "ID=8f742f4360ad4561:T=1712975416:RT=1712975416:S=ALNI_MYEjjG_8aAehpZQ58LPXuy8119UYQ",// 其他设置省略
}

3. 数据库连接

        还建立了与 MySQL 数据库的连接哦。指定了数据库的主机地址(这里是本地的 127.0.0.1)、端口(3306)、用户名(root)、密码(921108)以及要使用的数据库名(data),并且创建了一个游标,以便后续执行 SQL 语句呢。

self.db = pymysql.Connect(host='127.0.0.1',port=3306,user='root',password='921108',db='data'
)
self.cursor = self.db.cursor()

三、获取电影种类相关数据

        在 Douban 类中有一个 get_zhonglei 方法,它主要负责获取电影的种类相关信息。

1. 初始请求

        首先,它会向豆瓣电影的排行榜页面(https://movie.douban.com/chart)发送一个 GET 请求,带上之前设置好的 headers 和 cookies。然后通过 lxml 的 etree 来解析获取到的 HTML 内容,找到页面中相关的 span 元素列表。

url = "https://movie.douban.com/chart"
response = requests.get(url, headers=self.headers, cookies=self.cookies).text
html = etree.HTML(response)
span_list = html.xpath('//*[@id="content"]/div/div[2]/div[1]/div/span')

2. 进一步处理

        对于每个找到的 span 元素,它会提取出其中链接的 href 属性值,通过正则表达式从 href 中获取到电影类型对应的编号 type_。然后根据这个编号构建新的请求链接,再次发送请求获取到该类型电影的总数 filtered_total,最后调用 parse 方法来进一步处理这些数据哦。

for span in span_list:href = span.xpath('./a/@href')[0]type_ = re.findall(r'type=(\d+)', href)[0]url = f'https://movie.douban.com/j/chart/top_list_count?type={type_}&interval_id=100%3A90&action='response = requests.get(url=url, headers=self.headers, cookies=self.cookies).json()filtered_total = response['filtered_total']self.parse(type_, filtered_total, j, i)

四、解析并存储数据

   Douban 类中parse 方法则承担着解析获取到的具体电影数据并存储到数据库的重要任务。

1. 请求数据

        它会根据传入的电影类型编号 type_ 和总数 filtered_total,构建合适的请求参数,向 https://movie.douban.com/j/chart/top_list 发送请求,获取到该类型下的一系列电影详细信息,这些信息是以 JSON 格式返回的哦。

url = "https://movie.douban.com/j/chart/top_list"
params = {"type": type_,"interval_id": "100:90","action": "","start": "0","limit": filtered_total,
}
response = requests.get(url, headers=self.headers, cookies=self.cookies, params=params).json()

2. 数据处理与存储

        对于每一部电影的信息,它提取出诸如电影标题、演员数量、演员名单、评分、地区、上映日期、电影类型、投票数等重要信息。并且对上映日期进行了一些格式上的处理,然后将这些数据按照一定的格式准备好,尝试插入到名为 movie_info 的数据库表中。如果在插入过程中出现了 MySQL 错误,它会打印出错误信息哦。

for item in response:title = item['title']actor_count = item['actor_count']actors = item['actors']score = item['rating'][0]regions = item['regions'][0]release_date = item['release_date']types = item['types']vote_count = item['vote_count']// 数据处理省略部分代码try:sql = "insert into movie_info (movie_name,movie_date,movie_type, movie_country,actor_name,score, score_all) values (%s,%s,%s,%s,%s,%s,%s)"self.cursor.execute(sql, (movie_name,movie_date,movie_type, movie_country,actor_name,score, score_all))self.db.commit()except pymysql.MySQLError as e:print(f"An error occurred: {e}")

 完整代码:

# -*- coding:utf-8 -*-
import reimport pymysql
import requests
from lxml import etreeclass Douban(object):def __init__(self):self.headers = {"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7","accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6","cache-control": "no-cache","pragma": "no-cache","priority": "u=0, i","referer": "https://cn.bing.com/","sec-ch-ua": "\"Microsoft Edge\";v=\"131\", \"Chromium\";v=\"131\", \"Not_A Brand\";v=\"24\"","sec-ch-ua-mobile": "?0","sec-ch-ua-platform": "\"Windows\"","sec-fetch-dest": "document","sec-fetch-mode": "navigate","sec-fetch-site": "cross-site","sec-fetch-user": "?1","upgrade-insecure-requests": "1","user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0"
}self.cookies = {‘填入你的cookies’}self.db = pymysql.Connect(host='127.0.0.1',port=3306,user='root',password='921108',db='data')self.cursor = self.db.cursor()def get_zhonglei(self, j ,i):url = "https://movie.douban.com/chart"response = requests.get(url, headers=self.headers, cookies=self.cookies).texthtml = etree.HTML(response)span_list = html.xpath('//*[@id="content"]/div/div[2]/div[1]/div/span')for span in span_list:href = span.xpath('./a/@href')[0]# text = span.xpath('./a/text()')[0]# print(url)type_ = re.findall(r'type=(\d+)', href)[0]# print(type_)url = f'https://movie.douban.com/j/chart/top_list_count?type={type_}&interval_id=100%3A90&action='response = requests.get(url=url, headers=self.headers, cookies=self.cookies).json()filtered_total = response['filtered_total']print(type_, filtered_total)self.parse(type_, filtered_total, j, i)def parse(self, type_, filtered_total, j, i):url = "https://movie.douban.com/j/chart/top_list"params = {"type": type_,"interval_id": "100:90","action": "","start": "0","limit": filtered_total,}response = requests.get(url, headers=self.headers, cookies=self.cookies, params=params).json()for item in response:title = item['title']actor_count = item['actor_count']actors = item['actors']score = item['rating'][0]regions = item['regions'][0]release_date = item['release_date']types = item['types']vote_count = item['vote_count']j += 1# i.append([j, title, actor_count, actors, score, regions, release_date, types, vote_count])# print(j, title, actor_count, actors, score, regions, release_date, types, vote_count)if len(release_date) == 4:movie_date = f"{release_date}-01-01"else:movie_date = release_datemovie_name = titlemovie_type = str(types)movie_country = regionsactor_name = str(actors)score_all = vote_countprint(j, movie_name,movie_date,movie_type, movie_country,actor_name,score, score_all)# 插入movies表try:sql = "insert into movie_info (movie_name,movie_date,movie_type, movie_country,actor_name,score, score_all) values (%s,%s,%s,%s,%s,%s,%s)"self.cursor.execute(sql, (movie_name,movie_date,movie_type, movie_country,actor_name,score, score_all))self.db.commit()except pymysql.MySQLError as e:print(f"An error occurred: {e}")# self.db.rollback()pass
if __name__ == '__main__':j = 0i = []spider = Douban()spider.get_zhonglei(j, i)

        通过这段代码,我们就可以实现从豆瓣电影平台获取丰富的电影数据,并将它们有序地存储到我们自己的数据库中啦,是不是很有意思呢?当然,在实际应用中,我们还可以根据自己的需求对代码进行进一步的优化和扩展哦。

相关文章:

Python爬取豆瓣电影全部分类数据并存入数据库

在当今数字化的时代,网络上丰富的影视资源信息吸引着众多开发者去挖掘和利用。今天,我就来和大家分享一段有趣的代码,它能够从豆瓣电影平台获取相关数据并存储到数据库中哦。 结果展示(文末附完整代码): 目…...

算法模板1:排序+二分+高精度+前缀+差分

文章目录 1.1 排序STL sort函数快速排序算法模板归并排序算法模板 1.2 二分整数二分算法模板浮点数二分算法模板 1.3 高精度高精度加法高精度减法高精度乘低精度高精度除以低精度 1.4 前缀和与差分**一维前缀和****二维前缀和****一维差分****二维差分** 之前整理了好多算法模板…...

SpringBoot实现单文件上传

一、在springBoot项目中的pom.xml添加依赖。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency> 二、在资源目录下的static目录下中创建一个upload.html的表单文件…...

rust中解决DPI-1047: Cannot locate a 64-bit Oracle Client library问题

我们在使用rust-oracle crate连接oracle进行测试的过程中&#xff0c;会发现无法连接oracle&#xff0c;测试运行过程中抛出“DPI-1047: Cannot locate a 64-bit Oracle Client library”错误。该问题是由于rust-oracle需要用到oracle的动态连接库&#xff0c;我们通过安装orac…...

YOLOv11(Ultralytics)视频选定区域目标统计计数及跟踪

在计算机视觉的众多应用场景中&#xff0c;对特定区域的目标进行检测、跟踪与计数是一个常见且重要的需求。无论是在智慧交通中统计通过特定路口的车辆数量&#xff0c;还是在零售分析中追踪进入特定区域的顾客行为&#xff0c;这一功能都发挥着不可或缺的作用。 随着深度学习…...

24小时自动监控,自动录制直播蓝光视频!支持抖音等热门直播软件

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 工具特点📒📝 使用🎈 获取方式 🎈⚓️ 相关链接 ⚓️📖 介绍 📖 对于许多直播爱好者和内容创作者而言,错过心爱的直播或难以搜集视频素材始终是一个难题。今天,给大家分享的这款工具可以轻松解决这个问题,它拥有…...

InfiniBand(IB)快速上手

什么是IB&#xff1a; InfiniBand&#xff08;直译为“无限带宽”技术&#xff0c;缩写为IB&#xff09;是一个用于高性能计算的计算机网络通信标准&#xff0c;它具有极高的吞吐量和极低的延迟&#xff0c;用于计算机与计算机之间的数据互连。InfiniBand也用作服务器与存储系…...

D74【 python 接口自动化学习】- python 基础之HTTP

day74 http基础定义 学习日期&#xff1a;20241120 学习目标&#xff1a;http定义及实战 -- http基础介绍 学习笔记&#xff1a; HTTP定义 HTTP 是一个协议&#xff08;服务器传输超文本到浏览器的传送协议&#xff09;&#xff0c;是基于 TCP/IP 通信协议来传递数据&…...

移动光猫[HS8545M5-10]获取超密

移动光猫[HS8545M5-10]获取超级密码 1、缘由2、前期准备2.1、确保本地开通telnet客户端功能2.2、准备好相关软件 3、开始查找超密 1、缘由 最近想折腾一下ipv6ddns打通内外网&#xff0c;查询资料说是需要将光猫桥接到外网&#xff1b;但是使用光猫后边的用户名密码根本就找不到…...

原生JS和CSS,HTML实现开屏弹窗

开屏弹窗常应用于打开游戏&#xff0c;或者打开网站的时候&#xff0c;跳出来在正中间&#xff0c;来显示一些信息&#xff0c;并可以设置今日不再显示 CSS代码如下 <style>#box {width: 100vw;height: 100vh;background-color: rgba(0, 0, 0, 0.2);position: relative…...

vue--制作购物车

&#x1f914;如何制作出下列效果呢&#xff1f;&#x1f447; &#x1f636;‍&#x1f32b;️首先: 设置css样式&#xff1a; <style>body {font-family: Arial, sans-serif;}.cart-item {width: 50%;margin-bottom: 15px;padding: 10px;border: 2px solid gray;borde…...

深度测评腾讯云 HAI 智算服务:高性能 AI 计算的新标杆

本文 一、引言二、产品功能深度解析2.1 多样化的 GPU 配置选择2.2 预配置开发环境示例&#xff1a; 2.3 实时性能监控 三、核心技术特点与优势3.1 云端弹性扩展3.2 高性能计算架构 四、实际测试与代码案例4.1 NLP 案例&#xff1a;使用 BERT 进行情感分类数据集&#xff1a;IMD…...

MQ重复消费与消息顺序

如何避免消息重复消费 RocketMQ&#xff1a;给每个消息分配了一个MessageID。这个MessageID就可以作为消费者判断幂等的依据。这种方式不太建议&#xff0c;原因是在高并发场景下这个MessageID不保证全局唯一性。 最好由业务方创建一个与业务相关的全局唯一的ID来区分消息&am…...

应用商店双弹窗“APP在向用户申请权限时未同步告知用户申请此权限的理由”驳回uni-app应用上线的解决方法

目录 问题分析 解决方法 下载插件包&#xff1a;x-perm-apply-instr 将插件包导入进你项目中的uni_modules文件夹 在项目中的main.js文件中添加以下代码 完成 其它注意事项 addPermisionInterceptor 添加 uniApi 调用拦截 removePermisionInterceptor 移除 uniApi 调用…...

第 32 章 - Go语言 部署与运维

在Go语言的应用开发中&#xff0c;部署与运维是一个非常重要的环节。它不仅关系到应用能否顺利上线&#xff0c;还直接影响到应用的性能、安全性和可维护性。以下是根据您的需求整理的关于Go语言应用的打包和发布、容器化部署、监控和日志管理的相关内容。 1. 应用的打包和发布…...

噪杂环境离线语音通断器效果展示

介于之前的离线语音通断器模块的使用环境大部分为噪音比较小的环境中&#xff0c;部分客户对环境提出了更高的要求&#xff0c;能在噪杂、室外或者有一定的噪音的车内使用的模块开发需求被提高到了一个新的层次。最近找到某些能支持室外噪杂环境使用的芯片和模组&#xff0c;打…...

【django】扩展

1. Promise 1.1 对象和状态 是什么&#xff1f;是前端开发时js中的一个对象&#xff08;包裹&#xff09;。【对象】【异步请求】# 对象中有一个状态的值&#xff0c;status # 创建对象&#xff0c;不赋值&#xff0c;statuspendding let v1 new Promise(function(resolve, …...

逆向破解识别基础

找main函数&#xff1a; &#xff08;使用OllyDbg软件&#xff09; 方法一&#xff1a; 因为main函数需要三个参数&#xff0c;所以遇到三个参数加一个调用&#xff0c;那么可能是main函数。 方法二&#xff1a; 如果main函数中有字符串或者调用函数等一些唯一标识&#x…...

MFC 下拉框显示问题和控件自适应窗口大小

在mfc开发过程中&#xff0c;遇到了下拉框的两个问题&#xff0c;现在记录一下 1、把下拉框点开显示不全我放进去的多条文本 解决办法&#xff1a;把鼠标放到下拉框的倒三角去点一下&#xff0c;鼠标就会变成双向箭头&#xff0c;或者先选中一下下拉框再把鼠标移动到倒三角上去…...

Docker 的存储驱动及其优缺点

Docker 的存储驱动是容器文件系统的关键组成部分&#xff0c;决定了容器镜像和数据的存储方式。以下是常见的存储驱动及其优缺点&#xff1a; 1. OverlayFS/Overlay2 简介: Overlay 是现代 Linux 文件系统中一种高效的联合文件系统&#xff0c;Overlay2 是其改进版本&#xff0…...

新手也能懂:DCDC芯片外围那个神秘的‘自举电容’,到底怎么选才不会翻车?

新手也能懂&#xff1a;DCDC芯片外围那个神秘的‘自举电容’&#xff0c;到底怎么选才不会翻车&#xff1f; 第一次看到DCDC芯片数据手册里的"自举电容"时&#xff0c;我盯着那个连接在BTST和SW引脚之间的小元件发呆了十分钟——它看起来和普通电容没什么两样&#x…...

DayDreamInGIS 数据处理工具核心功能迭代与实战应用解析

1. DayDreamInGIS工具集的核心价值解析 第一次接触DayDreamInGIS是在三年前的一个国土调查项目上。当时团队需要处理上万条图斑数据的空间连接问题&#xff0c;ArcMap原生的空间分析工具运行了整整一晚上都没出结果&#xff0c;而使用DayDreamInGIS的空间连接插件&#xff0c;同…...

小型物联网系统——家居网关设计(C语言实现)

一、系统概述 家居网关是小型物联网系统的核心枢纽&#xff0c;负责多协议设备接入、数据汇聚转发、本地/远程控制三大核心功能。本设计基于STM32F103C8T6主控&#xff0c;集成Zigbee&#xff08;传感器接入&#xff09;、Wi-Fi&#xff08;云端通信&#xff09;、GPIO&#xf…...

PyCharm中如何快速取消pytest测试模式?5步搞定直接运行Python脚本

PyCharm中如何快速取消pytest测试模式&#xff1f;5步搞定直接运行Python脚本 作为Python开发者&#xff0c;我们经常需要在PyCharm中切换不同的运行模式。有时候&#xff0c;你可能只是想快速运行一个Python脚本&#xff0c;却发现PyCharm固执地以pytest模式执行&#xff0c;…...

音频处理避坑指南:二进制编码转换中的常见问题与解决方案

音频处理避坑指南&#xff1a;二进制编码转换中的常见问题与解决方案 音频处理在现代多媒体应用中扮演着重要角色&#xff0c;从语音识别到音乐制作&#xff0c;从流媒体传输到嵌入式设备音频播放&#xff0c;二进制编码转换都是核心技术环节。对于有一定经验的开发者而言&…...

Z-Image-Turbo LoRA WebUI实战案例:为独立游戏开发者生成角色立绘素材

Z-Image-Turbo LoRA WebUI实战案例&#xff1a;为独立游戏开发者生成角色立绘素材 1. 项目概述与价值 作为一名独立游戏开发者&#xff0c;你是否曾经为角色立绘的设计而头疼&#xff1f;传统的美术外包成本高昂&#xff0c;自己绘制又需要专业技能。现在&#xff0c;通过Z-I…...

基于ABB RobotStudio的工业机器人课程学习(第一周)

本周内容——成功安装并试用ABB RobotSyudioABB RobotStudio 6.08 安装教程 ABB RobotStudio作为工业机器人离线编程与仿真的核心工具&#xff0c;是开展工业机器人工作站设计、轨迹仿真的重要平台&#xff0c;其中6.08版本兼具稳定性与实用性&#xff0c;适配工业机器人仿真教…...

Qwen3-VL-8B系统资源管理:监控与清理GPU显存和C盘空间

Qwen3-VL-8B系统资源管理&#xff1a;监控与清理GPU显存和C盘空间 长期运行像Qwen3-VL-8B这样的大模型服务&#xff0c;就像养了一头“数字大象”——它能力强大&#xff0c;但胃口也不小&#xff0c;尤其能吃GPU显存和硬盘空间。很多朋友刚开始部署时一切顺利&#xff0c;但跑…...

MT5 Zero-Shot参数详解:Temperature与Top-P对中文改写多样性的影响

MT5 Zero-Shot参数详解&#xff1a;Temperature与Top-P对中文改写多样性的影响 1. 项目概述 MT5 Zero-Shot Chinese Text Augmentation 是一个基于 Streamlit 和阿里达摩院 mT5 模型构建的本地化 NLP 工具。这个工具专门用于中文句子的语义改写和数据增强&#xff0c;能够在保…...

2026降AI工具实测:性价比/效果/安全选品指南

花了整整一周时间把市面5款主流降AI工具全维度测了一遍&#xff0c;从处理效果、定价、安全性三个核心维度做了横向对比。结论放在最前面&#xff1a;综合实力最强、毕业生首选的是SpeedAI科研小助手&#xff0c;性价比拉满&#xff0c;新手还能免费试用&#xff0c;完全适配绝…...