(2024)豆瓣电影详情页内容爬虫详解和源码

news2025/2/8 5:20:32

(2024)豆瓣电影详情页内容爬虫详解和源码

这是一个Python爬虫程序,用于抓取豆瓣电影详情页面如https://movie.douban.com/subject/1291560/的数据。它首先发送GET请求,使用PyQuery解析DOM,然后根据<br>标签分割HTML内容,提取电影信息如导演、演员、类型等,并将中文键转换为英文键存储在字典中。完整代码包括请求、解析、数据处理和测试部分。当运行时,会打印出电影详情,如导演、演员列表、类型、时长等。

爬虫目的

获取 https://movie.douban.com/subject/1291560/ 电影详情的所有电影的属性。

image-20240621104936570

爬虫思路

  • 第一步,请求详情页面拿到响应
  • 第二步, 根据响应 + pyquery 解析dom拿到对应节点文本
  • 第三步,处理文本为想要的数据形式。

函数:getMovieInfoByUrl

分析dom

image-20240621104028761

OK,经过分析,我们找到了,使用jquery 获取电影信息dom的方式,但是没什么清晰的规律。所以需要特殊处理

  • 第一步:获取电影info的HTML
info_items_doc = doc("#content #info")
info_items_html_content = info_items_doc.html()
  • 第二步:根据br 标签划分为多个HTML片段,然后组成新的dom节点,再获取其文本,最后通过正则对文本处理,提取数据。
# 根据<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)        

输出

extracted_info {'导演': '宫崎骏', '编剧': '宫崎骏', '主演': '日高范子 / 坂本千夏 / 糸井重里 / 岛本须美 / 北林谷荣 / 高木均 / 雨笠利幸 / 丸山裕子 / 广濑正志 / 鹫尾真知子 / 铃木玲子 / 千叶繁 / 龙田直树 / 鳕子 / 西村朋纮 / 石田光子 / 神代知衣 / 中村大树 / 水谷优子 / 平松晶子 / 大谷育江', '类型': '动画 / 奇幻 / 冒险', '制片国家/地区': '日本', '语言': '日语', '上映日期': '2018-12-14(中国大陆) / 1988-04-16(日本)', '片长': '86分钟', '又名': '邻居托托罗 / 邻家的豆豆龙 / 隔壁的特特罗 / Tonari no Totoro / My Neighbor Totoro', 'IMDb': 'tt0096283'}

完整代码

# 豆瓣电影详情也爬数据
# https://movie.douban.com/subject/1291560/
import requests
from pyquery import PyQuery as pq
import re
from pprint import pprint

# 第一步,请求详情页面拿到响应
# 第二步, 根据响应 + 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]
        #======处理 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:
        # 我的联系方式:wx: Wusp1994 企鹅号: 812190146
        print(f"请求失败,状态码:{response.status_code}")
    return movieInfo


测试代码

if __name__ == "__main__":
    call_me = "卫星:Wusp1994 企鹅: 812190146"
    movie_url = 'https://movie.douban.com/subject/1291560/'
    getMovieInfoByUrl(movie_url)

输出结果

最后得到电影信息的字典,如果有缺失信息,可以联系我交流。

image-20240621104741549

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

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

相关文章

C语言第17篇:预处理详解

1、预定义符号 C语言设置了一些预定义符号&#xff0c;可以直接使用。预定义符号也是在预处理期间处理的。 __FILE__ //进行编译的源文件 __LINE__ //文件当前的行号 __DATE__ //文件被编译的日期 __TIME__ //文件被编译的时间 __STDC__ //如果编译器遵循ANSI…

LaTeX中添加矩阵分块虚线并设置虚线疏密

对于大型矩阵&#xff0c;有时需要添加分块虚线。 方法为使用arydshln宏包&#xff0c;然后在array环境中设置虚线。需要注意的是&#xff0c;使用矩阵环境需要搭配amsmath宏包使用&#xff0c;且需放在amsmath宏包之后。即导言区设置为 \usepackage{amsmath} \usepackage{ary…

人人讲视频如何下载

一、工具准备 1.VLC media player 2.谷歌浏览器 二、视频下载 1.打开人人讲网页&#xff0c;需要下载的视频 谷歌浏览器打开调试窗口 搜索m3u8链接 拷贝到VLCplayer打开网络串流方式打开测试是否能正常播放 2.下载视频 能正常播放后&#xff0c;切换播放为转换选择mp4格式…

【CPP】归并排序

目录 1.归并排序简介代码分析归并的非递归形式 1.归并排序 归并排序&#xff08;MERGE-SORT&#xff09; 是建立在归并操作上的一种有效的排序算法,该算法是采用分治法&#xff08;Divide andConquer&#xff09;的一个非常典型的应用。 将已有序的子序列合并&#xff0c;得到…

扩散模型 GLIDE:35 亿参数的情况下优于 120 亿参数的 DALL-E 模型

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学。 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 合集&#x…

com域名注册多少钱

COM域名注册价格视具体注册商而定&#xff0c;不同的注册商可能会有不同的收费标准。一般来说&#xff0c;COM域名注册价格在10美元到20美元之间&#xff0c;可根据不同的需求选择注册时间的长短&#xff0c;从1年到10年等不同时间段的注册费用也不同。以下是关于COM域名注册价…

Python爬虫学习 | Scrapy框架详解

一.Scrapy框架简介 何为框架&#xff0c;就相当于一个封装了很多功能的结构体&#xff0c;它帮我们把主要的结构给搭建好了&#xff0c;我们只需往骨架里添加内容就行。scrapy框架是一个为了爬取网站数据&#xff0c;提取数据的框架&#xff0c;我们熟知爬虫总共有四大部分&am…

【LLM之KG】KoPA论文阅读笔记

研究背景 知识图谱补全&#xff08;KGC&#xff09;是通过预测知识图谱中缺失的三元组来完善知识图谱的信息。传统方法主要基于嵌入和预训练语言模型&#xff0c;但这些方法往往忽视了知识图谱的结构信息&#xff0c;导致预测效果不佳。 研究目标 本文的研究目标是探索如何将…

海外短剧系统如何征服观众心

海外短剧系统要征服观众的心&#xff0c;需要综合考虑多个方面。 1、紧凑的剧情设计&#xff1a; 短小精悍&#xff1a;海外短剧通常每集时长不超过半小时&#xff0c;甚至有的仅有几分钟。这种紧凑的剧情设计让观众能够在短时间内迅速沉浸在故事中&#xff0c;无需花费大量时间…

分页查询前端对接

文章目录 添加角色修改角色当点击修改按钮后,那么就会弹出对话框,所以要设置显示为true点击修改的时候就是 要显示对话框 制作用户管理页面开发后端接口用户查询前端整合新增接口功能实现修改 添加角色 首先添加 添加表单的组件 那么总结一下 就是使用 组件 然后再使用变量接…

docker简单快速使用上手

1.Docker是什么&#xff1f; Docker 是一个开源的容器化平台&#xff0c;主要用于开发、运输和运行应用程序。它通过提供轻量级的虚拟化机制&#xff0c;使得开发者可以在一个隔离的环境中运行和管理应用程序及其依赖项。Docker 的核心组件包括镜像&#xff08;Image&#xff…

FOC方案大合集!

获取链接&#xff01;&#xff01;&#xff01; 本次小编给大家带来了一份FOC的方案大合集。此套方案是基于峰岹科技FU68系列MCU的系列方案&#xff0c;包含常用的无感&#xff0c;有感无刷电机的应用&#xff0c;每份方案都包含了原理图&#xff0c;PCB&#xff0c;代码文件&…

游戏大厂“脱钩”安卓商店: 独立渠道TapTap们能否渔利

一纸公告将游戏厂商与渠道的博弈再度摆上了台面。 近日&#xff0c;腾讯控股旗下手游《地下城与勇士&#xff1a;起源》&#xff08;下称“DNF手游”&#xff09;运营团队发布公告称&#xff0c;自6月20日起&#xff0c;DNF手游将不再上架部分安卓平台的头部应用商店。 下架的…

Google Vortex流式存储引擎分析

作者&#xff1a;archimekai&#xff0c;转载请注明出处 参考文献&#xff1a; Edara, P., Forbesj, J., & Li, B. (2024). Vortex: A Stream-oriented Storage Engine For Big Data Analytics. Companion of the 2024 International Conference on Management of Data, 17…

ClickHouse 24.5.3:全面解析与RPM单节点轻松部署!

简介 ClickHouse是由俄罗斯的Yandex公司开发的开源列式数据库管理系统。它最早于2016年开源&#xff0c;主要用于实时数据分析。ClickHouse通过列存储、向量化执行、并行计算等技术&#xff0c;实现了对大规模数据集的快速查询和分析&#xff0c;特别适合实时数据分析和商业智能…

LayoutSystem布局系统

简介: LayoutSystem,是UGUI中由CanvasUpdateSystem发起(m_LayoutRebuildQueue中大部分都是LayoutRebuilder)的关于布局排列的处理系统。 类图: 布局过程 核心代码讲解: LayoutRebuilder

001.VMware Workstation Pro虚拟平台安装

我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448; 入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448; 虚 拟 环 境 搭 建 &#xff1a;&#x1f449;&…

探秘企业成功的秘密武器:这个知识库搭建攻略你必须知道

在数字化浪潮中,你的企业还在用传统的信息管理方式吗?别落后了!最新的企业知识库搭建攻略来了,它将是你提升企业竞争力、创新能力和员工效率的强力工具。让我们一起探索如何构建自己的知识王国,解锁企业成功的秘诀! 一、为什么你的企业需要立刻行动搭建知识库? 信息孤…

GWO-CNN-SVM,基于GWO灰狼优化算法优化卷积神经网络CNN结合支持向量机SVM数据分类(多特征输入多分类)

GWO-CNN-SVM&#xff0c;基于GWO灰狼优化算法优化卷积神经网络CNN结合支持向量机SVM数据分类(多特征输入多分类) 1. GWO灰狼优化算法 灰狼优化算法&#xff08;Grey Wolf Optimizer, GWO&#xff09;是一种启发式优化算法&#xff0c;模拟了灰狼群体的社会行为&#xff0c;包…

apache activeMq

https://blog.csdn.net/qq_29651203/article/details/108487924 游览器输入地址: http://127.0.0.1:8161/admin/ 访问activemq管理台 账号和密码默认为: admin/admin# yml配置的密码也是如下的密码 activemq:url: failover:(tcp://localhost:61616)username: adminpassword: ad…