完整代码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 pprint

def 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]] = value
        movieInfo['duration'] = int(movieInfo['duration'].split('分钟')[0])
        #======处理 info 标签信息
        pprint(movieInfo)

    else:
        print(f"请求失败,状态码:{response.status_code}")
    return movieInfo

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

3d渲染软件有哪些(2),渲染100邀请码1a12

3D渲染软件有很多&#xff0c;上次我们介绍了几个&#xff0c;这次我们接着介绍。 1、Arnold Arnold渲染器是一款基于物理算法的电影级渲染引擎&#xff0c;它具有渲染质量高、材质系统丰富、渲染速度快等特点&#xff0c;是3D设计师的极佳选择。2、Octane Render Octane Ren…

云3D渲染:深度剖析技术原理、优势及其在各行业的广泛应用

云3D渲染技术&#xff0c;在数字化转型的大潮中&#xff0c;以其显著的优势和广阔的应用潜力&#xff0c;正在深刻地重塑多个行业的未来。它不仅为电影特效、建筑设计、游戏开发和虚拟现实等领域注入了前所未有的视觉震撼&#xff0c;还促进了创意思维与前沿技术的紧密结合&…

【编译原理】总览

1 字母表 字母表&#xff1a; 用∑表示&#xff0c;它是一个有穷符号集合 符号&#xff1a;字母、数字、标点符号... 例如&#xff1a;二进制字母表为{0&#xff0c;1}&#xff0c;ASCII字符集 2 字母表的运算 字母表上的乘积&#xff1a; ∑1∑2{ab | a属于∑1&#xff0c;b…

气流流型烟雾模型研究相关法规要求及拍摄注意事项

气流模式可视化提供制药设施中实际气流模型的视觉记录。它是目前最广泛接受的、证明关键工艺区域的气流模型满足监管期望的方法。此外&#xff0c;气流模型可视化允许多个职能组织发现气流设计和功能的有效性和意义&#xff0c;特别是在关键领域。 与气流模型相关的法规指南要求…

数据处理神器Elasticsearch_Pipeline:原理、配置与实战指南

文章目录 &#x1f4d1;引言一、Elasticsearch Pipeline的原理二、Elasticsearch Pipeline的使用2.1 创建 Pipeline2.2 使用 Pipeline 进行索引2.3 常用的 Processor 三、实际应用场景3.1 日志数据处理3.2 数据清洗和标准化3.3 数据增强 四、最佳实践4.1 性能优化4.2 错误处理4…

晶方科技:台积电吃饱,封装迎春?

半导体产业链掀起涨价潮&#xff0c;先进封装迎接利好。 这里我们来聊国内先进封装企业——晶方科技。 近期&#xff0c;由于产能供不应求&#xff0c;台积电决定上调先进封装产品价格&#xff0c;还表示订单已经排到2026年。 大哥吃不下了&#xff0c;剩下的订单全都是空间。…

GMSB文章四:微生物组多样性分析

欢迎大家关注全网生信学习者系列&#xff1a; WX公zhong号&#xff1a;生信学习者Xiao hong书&#xff1a;生信学习者知hu&#xff1a;生信学习者CDSN&#xff1a;生信学习者2 介绍 Alpha多样性主要关注的是样品内部的多样性&#xff0c;即一个特定区域或生态系统内的物种丰…

加油卡APP系统开发,优惠加油!

在当下的社会生活中&#xff0c;汽车已经成为了家家户户必备的出行工具&#xff0c;骑车加油也成为了居民生活中不可或缺的事情。为了让大众更加优惠加油&#xff0c;在线加油卡系统成为了一个重要的加油渠道&#xff01; 在线加油卡系统是一个移动应用程序&#xff0c;用户可…

记一次elementui时间线的实现

实现效果 点击展开&#xff0c;每次累加五条数据进行展示 实现思路 起始本质上就是一个分页查询&#xff0c;只不过按新的形式展示&#xff0c;然后也不统计总数&#xff0c;每次只展示固定的5条数据点击加载更多&#xff0c;就展示下一页&#xff0c;页的页数进行1&#xff…

回购注销高管减持,东软集团的“大手笔”有意义吗?

文&#xff1a;互联网江湖 作者&#xff1a;刘致呈 作为老牌软件巨头&#xff0c;东软集团这两年的业绩着实有些不够看。 看财报数据&#xff0c;22年东软集团营收94.66亿&#xff0c;净亏损3.47亿&#xff0c;扣非净利利润-5.30亿。23年&#xff0c;集团营收105.44亿&#x…

玩个游戏 找以下2个wordpress外贸主题的不同 你几找到几处

Aitken艾特肯wordpress外贸主题 适合中国产品出海的蓝色风格wordpress外贸主题&#xff0c;产品多图展示、可自定义显示产品详细参数。 https://www.jianzhanpress.com/?p7060 Ultra奥创工业装备公司wordpress主题 蓝色风格wordpress主题&#xff0c;适合装备制造、工业设备…

使用Spring Boot构建RESTful API:从理论到实践

文章目录 引言第一章 RESTful API基础知识1.1 什么是RESTful API1.2 RESTful API的优势 第二章 Spring Boot基础知识2.1 什么是Spring Boot2.2 Spring Boot的主要特性 第三章 使用Spring Boot构建RESTful API3.1 项目初始化3.2 构建基础结构3.3 定义实体类3.4 创建Repository接…

虚拟化技术(一)

目录 一、虚拟化技术简介二、服务器虚拟化&#xff08;一&#xff09;服务器虚拟化的层次&#xff08;二&#xff09;服务器虚拟化的底层实现&#xff08;三&#xff09;虚拟机迁移&#xff08;四&#xff09;隔离技术&#xff08;五&#xff09;案例分析 一、虚拟化技术简介 虚…

【十六】【QT开发应用】Menu菜单,contextMenuEvent,setContextMenuPolicy,addAction

在 Qt 框架中&#xff0c;QMenu 类用于创建和管理菜单。菜单是用户界面的一部分&#xff0c;可以包含多个选项或动作&#xff0c;用户可以选择这些选项来执行特定的功能。菜单通常显示在菜单栏、上下文菜单&#xff08;右键菜单&#xff09;或工具栏中。 基本用法 创建菜单对象…

# Kafka_深入探秘者(5):kafka 分区

Kafka_深入探秘者&#xff08;5&#xff09;&#xff1a;kafka 分区 一、kafka 副本机制 1、Kafka 可以将主题划分为多个分区(Partition)&#xff0c;会根据分区规则选择把消息存储到哪个分区中&#xff0c;只要如果分区规则设置的合理&#xff0c;那么所有的消息将会被均匀的…

边缘混合计算智慧矿山视频智能综合管理方案:矿山安全生产智能转型升级之路

一、智慧矿山方案介绍 智慧矿山是以矿山数字化、信息化为前提和基础&#xff0c;通过物联网、人工智能等技术进行主动感知、自动分析、快速处理&#xff0c;实现安全矿山、高效矿山的矿山智能化建设。旭帆科技TSINGSEE青犀基于图像的前端计算、边缘计算技术&#xff0c;结合煤…

u盘插到另一台电脑上数据丢失怎么办?提供实用的解决方案

在现代数字化生活中&#xff0c;U盘作为一种便携式存储设备&#xff0c;承载着我们重要的数据和信息。然而&#xff0c;有时当我们将U盘插入另一台电脑时&#xff0c;可能会遇到数据丢失的棘手问题。这可能是由于多种原因造成的&#xff0c;那么&#xff0c;U盘插到另一台电脑上…

使用隐式事件执行控制图

什么是隐式事件&#xff1f; 隐式事件是图表执行时发生的内置事件&#xff1a; 图表唤醒 进入一个状态 退出状态 分配给内部数据对象的值 这些事件是隐式的&#xff0c;因为您没有显式地定义或触发它们。隐式事件是它们发生的图表的子级&#xff0c;仅在父图表中可见。 隐式事…

png格式快速压缩该怎么做?在电脑压缩png图片的方法

png格式的图片如何快速压缩变小呢&#xff1f;现在网络的不断发展&#xff0c;图片是日常用来分享展示内容的一种常用手段&#xff0c;其中使用最多的一种图片格式就是png&#xff0c;png格式具有无损压缩支持透明底的特性&#xff0c;在很多的场景下都会使用。 现在图片的清晰…

笔记-python reduce 函数

reduce() 函数在 python 2 是内置函数&#xff0c; 从python 3 开始移到了 functools 模块。 官方文档是这样介绍的 reduce(...) reduce(function, sequence[, initial]) -> valueApply a function of two arguments cumulatively to the items of a sequence, from left …