完整代码Python爬取豆瓣电影详情数据

完整代码Python爬取豆瓣电影详情数据

引言

在数据科学和网络爬虫的世界里,豆瓣电影是一个丰富的数据源。在本文中,我们将探讨如何使用Python语言,结合requestspyquery库来爬取豆瓣电影的详情页面数据。我们将通过一个具体的电影详情页面作为例子,一步步解析并提取我们感兴趣的信息。

完整代码放到最后!!!完整代码放到最后!!!完整代码放到最后!!!

环境准备

在开始之前,请确保您的环境中已安装以下Python库:

  • requests:用于发送HTTP请求。
  • pyquery:使HTML文档的查询变得简单,类似于jQuery。
  • re:Python的正则表达式库,用于文本匹配和提取。

您可以通过以下命令安装所需的库:

pip install requests pyquery

爬虫步骤概览

我们的爬虫任务分为三个主要步骤:

  1. 发送HTTP请求:获取目标网页的内容。
  2. 解析HTML:使用pyquery提取页面中的数据。
  3. 数据提取与处理:将提取的数据转换为所需的格式。

详细代码实现

第一步:发送HTTP请求

我们首先构造一个函数getMovieInfoByUrl,它接受一个电影详情页面的URL作为参数,并发送GET请求获取页面内容。

import requests
from pyquery import PyQuery as pq
import re
from pprint import pprintdef getMovieInfoByUrl(detailUrl):movieInfo = {}headers = {# 请求头,伪装成浏览器访问}response = requests.get(detailUrl, headers=headers)# 检查请求是否成功if response.status_code == 200:# ...

第二步:解析HTML

使用pyquery解析响应文本,提取页面中的元素。

    doc = pq(response.text)# ...

第三步:数据提取与处理

根据页面结构,提取电影的年份、描述、主要信息等,并进行适当的处理。

    movieInfo['release_year'] = re.findall(r'\d+', doc("#content h1 .year").text())[0]movieInfo['movie_desc'] = doc("#link-report-intra .all").text()# ...

正则表达式的应用

在提取信息时,我们使用正则表达式来匹配和分割文本。例如,我们使用正则表达式来分割<br/>标签,并提取关键的电影信息。

    content_list = re.split(r'<br/>', info_items_html_content)regex_pattern = re.compile(r'(.*?):\s(.*?)(?:\n|$)')for content in content_list:# ...

映射中文键到英文键

为了方便后续处理,我们将中文键映射到英文键。

    key_mapping = {# 中文键到英文键的映射}for key, value in extracted_info.items():if key in key_mapping:movieInfo[key_mapping[key]] = value

结果展示

最后,我们打印出提取的电影信息。

    pprint(movieInfo)return movieInfo

image-20240626093752560

总结

在本文中,我们学习了如何使用Python爬取豆瓣电影详情页面的数据。我们通过分析网页结构,使用requestspyquery提取了页面中的关键信息,并使用正则表达式对信息进行了处理和格式化。希望这篇文章能帮助您入门网络爬虫,并激发您探索更多数据获取和处理的方法。

完整代码

# 豆瓣电影详情也爬数据
import requests
from pyquery import PyQuery as pq
import re
from pprint import pprint
import time# 第一步,请求详情页面拿到响应
# 第二步, 根据响应 + pyquery 解析dom拿到对应节点文本
# 第三步,处理文本为想要的数据形式。def getMovieInfoByUrl(detailUrl):movieInfo = {}# 定义请求头headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',# 其他需要的请求头...}# 发送 GET 请求并获取响应内容response = requests.get(detailUrl, headers=headers)# 确保请求成功if response.status_code == 200:doc = pq(response.text)movieInfo['release_year'] = re.findall(r'\d+', doc("#content h1 .year").text())[0]movieInfo['movie_desc'] = doc("#link-report-intra .all").text()#======处理 info 标签信息info_items_doc = doc("#content #info")info_items_html_content = info_items_doc.html()# 根据<br>标签划分内容content_list = re.split(r'<br/>', info_items_html_content)extracted_info = {}# 定义正则表达式模式regex_pattern = re.compile(r'(.*?):\s(.*?)(?:\n|$)')# 输出划分后的内容for content in content_list:info_item_doc = pq(f'<div>{content}<div>')info_item_text = info_item_doc.text()match = regex_pattern.match(info_item_text)if match:extracted_info[match.group(1)] = match.group(2)# print("extracted_info",extracted_info)# 映射中文键到英文键key_mapping = {'主演': 'leading_actor','制片国家/地区': 'release_region','导演': 'director','片长': 'duration','类型': 'genre',}for key,value in extracted_info.items():if key in key_mapping:movieInfo[key_mapping[key]] = valuemovieInfo['duration'] = int(movieInfo['duration'].split('分钟')[0])#======处理 info 标签信息pprint(movieInfo)else:print(f"请求失败,状态码:{response.status_code}")return movieInfo

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/860797.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle11.2.0.4 RAC 保姆级静默安装(一) GI集群软件

一、响应文件准备 我们直接使用软件解压后的response文件夹中的响应文件模板进行修改 选择当前服务器的主机名,产品目录是在已存在的/u01/app目录基础上自动创建的无需提前创建oraInventory 按需选择语言,具体语言配置参考表格 一般rac默认选择安装类型为CRS_CONFIG 对应正…

借助 NGINX Unit 在服务器端使用 WebAssembly

原文作者&#xff1a;Liam Crilly of F5 原文链接&#xff1a;借助 NGINX Unit 在服务器端使用 WebAssembly 转载来源&#xff1a;NGINX 中文官网 NGINX 唯一中文官方社区 &#xff0c;尽在 nginx.org.cn WebAssembly&#xff08;缩写为 Wasm&#xff09;可为 Web 应用领域提供…

C++ 教程 - 06 类的封装、继承、多态

文章目录 封装继承多态 封装 在private/protected 模块放置数据或者底层算法实现&#xff1b;在public块提供对外接口&#xff0c;实现相应的功能调用&#xff1b;类的封装案例 #include <iostream> using namespace std;// 类的定义 一般放在头文件 class Stu {public…

uniapp——上传图片获取到file对象而非临时地址——基础积累

最近在看uniapp的代码&#xff0c;遇到一个需求&#xff0c;就是要实现上传图片的功能 uniapp 官网地址&#xff1a;https://uniapp.dcloud.net.cn/ 上传图片有对应的API&#xff1a; uni.chooseImage方法&#xff1a;https://uniapp.dcloud.net.cn/api/media/image.html#choo…

没有手机怎么办呐!高考成绩出来了:请不要吹灭别人的灯——早读(逆天打工人爬取热门微信文章解读)

结婚的时候红包随礼随多少呢 引言Python 代码第一篇 洞见 高考成绩出来了&#xff1a;请不要吹灭别人的灯第二篇结尾 为什么是这个标题呢&#xff1f; 是因为摸鱼看足球直播 主播好兄弟结婚 他老婆问他要红包 引言 今天早上停电了 大概是在3点多的时候 我本身一直都没有开空调…

Javac编译器

Java语言的编译器是一段不确定的操作过程&#xff0c;可能是讲Java文件转变为class文件的过程&#xff0c;也可能是指虚拟机的后端编译&#xff0c;讲字节码转换为机器码的过程&#xff0c;还肯是静态提前编译器直接讲Java文件编译为本地机器代码的过程。 前端编译器&#xff…

HTML5五十六个民族网站模板源码

文章目录 1.设计来源高山族1.1 登录界面演示1.2 注册界面演示1.3 首页界面演示1.4 中国民族界面演示1.5 关于高山族界面演示1.6 联系我们界面演示 2.效果和源码2.1 动态效果2.2 源代码2.3 源码目录 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.ne…

数字化转型第三步:数字化业务创新与发展,提升收入和利润

引言&#xff1a;之前笔者的文章发布了企业数字化转型业务部分&#xff0c;如【开源节流】如何通过数字化转型增强盈利能力&#xff1f;企业供应链数字化转型如何做&#xff1f;让企业盈利能力增强再飞一会 【财务数字化转型之底座】集团企业财务数据中台系统建设方案 等文章&a…

基于jeecgboot-vue3的Flowable流程-自定义业务表单处理(二)-挂接自定义业务表单

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 1、增加一个根据服务名称动态寻找对应自定义表单组件的hooks import { ref, reactive, computed, markRaw, onMounted, defineAsyncComponent } from vue; import { listCustomForm } fro…

Redis之优惠券秒杀

文章目录 全局ID生成器添加优惠券实现优惠券秒杀下单超卖问题悲观锁和乐观锁相关文章乐观锁执行逻辑乐观锁解决超卖问题 一人一单功能超卖问题相关文章一人一单执行逻辑代码实现集群模式下锁失效 分布式锁基于Redis的分布式锁Redis实现分布式锁流程实现分布式锁初级版本分布式锁…

RabbitMQ(消息队列)

RabbitMQ 它是消息中间件&#xff0c;是在消息的传输过程中保存消息的容器&#xff0c;实现应用程序和应用程序之间通信的中间产品。目前主流消息队列通讯协议是AMQP&#xff08;二进制传输&#xff0c;支持多种语言&#xff09;、JMS&#xff08;HTTP传输&#xff0c;只支持J…

要离职了,记录一下个人在用的 Mac 应用

大家好&#xff0c;我是楷鹏。 通用 飞书 说起来不信&#xff0c;第一个推荐的是【飞书】&#xff0c;飞书是目前用过最舒服的项目管理应用了。 单拎出来一个飞书文档&#xff0c;功能和体验远超市面上腾讯文档、石墨文档、语雀等等。 现在飞书还支持个人版&#xff0c;No…

【系统架构设计师】六、信息系统基础知识(定义|分类|企业信息化系统|生命周期|建设原则|开发方法)

目录 一、信息系统的定义 二、信息系统的分类 三、企业使用的信息化系统 四、信息系统的生命周期 五、信息系统建设原则 六、信息系统的开发方法 6.1 结构化方法 6.2 原型法 6.3 构件化开发方法 6.4 面向服务的方法 6.5 面向对象的方法 6.6 敏捷方法 历年真题考情&#x…

还是国产大模型靠谱!这里有一个OpenAI API用户特别搬家计划

近日&#xff0c;一场风波在科技圈引起了广泛的关注。6月25日凌晨&#xff0c;OpenAI向大量开发者发送邮件&#xff0c;通知他们&#xff1a;“您的组织有流量来自来OpenAl目前不支持的地区。从7月9日起&#xff0c;我们将采取额外措施&#xff0c;停止OpenAI不支持的国家和地区…

iOS开发者模式自带弱网测试工具

弱网测试的思路 弱网功能测试&#xff1a;2G/3G/4G、高延时、高丢包 无网状态测试&#xff1a;断网功能测试、本地数据存储 用户体验关注&#xff1a;响应时间、页面呈现、超时文案、超时重连、安全及大流量风险 网络切换测试&#xff1a;WIFI → 4G/3G/2G → 网多状态切换…

①分析胃癌组蛋白脱乙酰酶HDS模型-配对转录组差异

目录 HDS评分构建 ①数据加载 ②评分计算 做样本及评分展示图 ①数据处理 ②进行作图 分析配对的单细胞及转录组胃癌数据的 HDS评分,数据源于gastric-cancer - GitCode①胃癌单细胞和配对转录组揭示胃肿瘤微环境(文献和数据)_代码笔记:处理迄今为止最大的单细胞胃癌数…

贪吃蛇项目GameStart部分:对游戏的初始化

接上一篇文章介绍完需要使用到的WIN32API的相关知识&#xff0c;本篇文章让我们来开始使用他们来创建我们的贪吃蛇欢迎界面以及游戏所需要的地图。 准备工作&#xff1a; 为了后面我们构建贪吃蛇游戏所需要的各项函数便于观察&#xff0c;同时便于我们的函数声明&#xff0c;在…

【源码+文档+调试讲解】企业人才引进服务平台

摘 要 随着信息时代的来临&#xff0c;过去的传统管理方式缺点逐渐暴露&#xff0c;对过去的传统管理方式的缺点进行分析&#xff0c;采取计算机方式构建企业人才引进服务平台。本文通过课题背景、课题目的及意义相关技术&#xff0c;提出了一种企业信息、招聘信息、应聘信息等…

Python-爬虫 下载天涯论坛帖子

为了爬取的高效性&#xff0c;实现的过程中我利用了python的threading模块&#xff0c;下面是threads.py模块&#xff0c;定义了下载解析页面的线程&#xff0c;下载图片的线程以及线程池 import threading import urllib2 import Queue import re thread_lock threading.RL…

300 KVA(240kW、180KVAR)系列负载组

交流 固定式/永久式 电阻式和电抗性 300 KVA&#xff08;240kW、180KVAR&#xff09; 480 伏交流电 60赫兹 这是一款紧凑、多功能的 300 KVA 固定/永久负载组&#xff0c;用于测试备用发电机和地面电源装置。负载组可用于测试在 480V 电压下最大 300KVA 的任何负载。…