完整代码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,一经查实,立即删除!

相关文章

JavaScript关于bind解析

在 JavaScript 中&#xff0c;bind() 方法用于创建一个新的函数&#xff0c;该函数的 this 值被绑定到调用 bind() 方法的对象。bind() 方法的主要目的是修改函数的 this 指向。 bind() 方法可以接受一个或多个参数&#xff0c;第一个参数是要绑定的 this 值&#xff0c;后续的…

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 应用领域提供…

探索IPython的隐藏力量:精通%macro命令

探索IPython的隐藏力量&#xff1a;精通%macro命令 在IPython的强大世界中&#xff0c;存在着一些被称为“魔术命令”的特殊命令&#xff0c;它们扩展了Python的标准能力&#xff0c;让我们的交互式编程体验更加丰富和高效。其中&#xff0c;%macro命令是一个鲜为人知但极其有…

Vscode interaction window

python 代码关联到 jupyter 模式 在代码前添加&#xff1a; # %%print("hellow wolrd!") 参考文档链接&#xff1a; https://code.visualstudio.com/docs/python/jupyter-support-py

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

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

3、广告-交易模式

一、交易模式种类&#xff08;Types of Transaction Models&#xff09; RTB实时竞价&#xff08;Real-Time Bidding, RTB&#xff09; RTB是程序化广告中最常见的交易模式之一。它通过实时竞价的方式&#xff0c;让广告主在广告展示前以竞拍的方式获取广告展示机会。每当有广告…

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…

筛斗数据:数据提取技术,构建智慧企业的基石

在信息化和数字化的浪潮下&#xff0c;企业面临着前所未有的机遇与挑战。为了在这场变革中立于不败之地&#xff0c;越来越多的企业开始转型为智慧企业&#xff0c;而数据提取技术正是构建智慧企业的关键基石。 一、数据提取技术的重要性 数据提取技术是指从各种数据源中自动…

零基础小白学习 Python,应该如何配置 Python 开发环境?(包含Windows、MacOS、Linux)

学习编程的第一步是配置一个良好的开发环境&#xff0c;尤其是对零基础的小白来说&#xff0c;一个简单而有效的开发环境能够帮助你快速上手&#xff0c;减少不必要的技术障碍。 1. 理解Python和开发环境 Python是一种高级编程语言&#xff0c;具有简单易学、功能强大的特点。…

LeetCode-数组/回溯-No40组合总和II

题目&#xff1a; 给定一个候选人编号的集合 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次 。 注意&#xff1a;解集不能包含重复的组合。 示例 1: 输入: ca…

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

结婚的时候红包随礼随多少呢 引言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…

TypeError: Object of type bytes is not JSON serializable

从您提供的错误跟踪信息来看&#xff0c;问题在于您尝试将一个bytes类型的对象作为JSON数据传递给requests.post方法的json参数。但是&#xff0c;json参数只接受可以被json.dumps序列化为JSON格式的Python数据类型&#xff08;如字典、列表、字符串、数字、None、True和False&…

FreeRTOS中任务控制块和任务句柄的作用

1. 任务控制块&#xff08;Task Control Block&#xff0c;TCB&#xff09; 任务控制块 是FreeRTOS内核用于管理任务的关键数据结构。它包含了任务执行所需的各种信息。每个任务对应一个唯一的TCB。 主要作用&#xff1a; 存储任务状态&#xff1a;TCB包含任务的当前状态信息…

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

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

java Object中有哪些方法

在Java中&#xff0c;java.lang.Object类是所有类的父类。每个类都直接或间接地继承自Object。以下是Object类中定义的主要方法&#xff1a; Object类的方法 public final Class<?> getClass() 返回一个表示对象运行时类的Class对象。 Object obj new Object(); Class…

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

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

PostgreSQL 高可用性与灾难恢复策略(七)

1. 备份与恢复策略 1.1 常见备份策略 1.1.1 定期物理备份 使用 pg_basebackup 工具创建物理备份&#xff0c;备份数据库的整个数据目录。 pg_basebackup -D /path/to/backupdir -Fp -Xs -P -U username -h hostname1.1.2 逻辑备份 使用 pg_dump 工具创建逻辑备份&#xff…