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

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

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

爬虫目的

获取 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

目录
相关文章
|
4月前
|
数据采集 机器学习/深度学习 数据可视化
分享68个Python爬虫源码总有一个是你想要的
分享68个Python爬虫源码总有一个是你想要的
188 0
|
1月前
|
数据采集 数据可视化 算法
【优秀python案例】基于Python的豆瓣电影TOP250爬虫与可视化设计与实现
本文设计并实现了一个基于Python的豆瓣电影TOP250爬虫与可视化系统,通过获取电影评分、评论并应用词云和饼图等可视化技术,为用户提供了电影评价的直观展示和深入分析。
【优秀python案例】基于Python的豆瓣电影TOP250爬虫与可视化设计与实现
|
1月前
|
数据采集 数据可视化 关系型数据库
【优秀python web设计】基于Python flask的猫眼电影可视化系统,可视化用echart,前端Layui,数据库用MySQL,包括爬虫
本文介绍了一个基于Python Flask框架、MySQL数据库和Layui前端框架的猫眼电影数据采集分析与可视化系统,该系统通过爬虫技术采集电影数据,利用数据分析库进行处理,并使用Echart进行数据的可视化展示,以提供全面、准确的电影市场分析结果。
|
3月前
|
数据采集 存储 JavaScript
(2024)豆瓣电影TOP250爬虫详细讲解和代码
这是一个关于如何用Python爬取2024年豆瓣电影Top250的详细教程。教程涵盖了生成分页URL列表和解析页面以获取电影信息的函数。`getAllPageUrl()` 生成前10页的链接,而`getMoiveListByUrl()` 使用PyQuery解析HTML,提取电影标题、封面、评价数和评分。代码示例展示了测试这些函数的方法,输出包括电影详情的字典列表。
110 3
|
3月前
|
数据采集 存储 JSON
豆瓣电影信息爬虫实战-2024年6月
使用Python和`requests`、`PyQuery`库,本文教程教你如何编写一个豆瓣电影列表页面的爬虫,抓取电影标题、导演、主演等信息。首先确保安装所需库,然后了解技术栈,包括Python、Requests、PyQuery和正则表达式。爬虫逻辑包括发送HTTP请求、解析HTML、提取数据。代码示例展示了如何实现这一过程,最后运行爬虫并将结果保存为JSON文件。注意遵守网站使用条款和应对反爬策略。
117 2
|
4月前
|
数据采集 网络安全 UED
揭秘豆瓣网站爬虫:利用lua-resty-request库获取图片链接
本文探讨了如何使用Lua的lua-resty-request库和爬虫代理IP技术从豆瓣网站高效获取图片链接。通过定制请求头部和代理服务,可以应对反爬虫机制,提高爬虫的稳定性和匿名性。示例代码展示了一种方法,但实际应用需考虑版权和法律法规。
揭秘豆瓣网站爬虫:利用lua-resty-request库获取图片链接
|
1月前
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
103 4
|
28天前
|
数据采集 存储 搜索推荐
打造个性化网页爬虫:从零开始的Python教程
【8月更文挑战第31天】在数字信息的海洋中,网页爬虫是一艘能够自动搜集网络数据的神奇船只。本文将引导你启航,用Python语言建造属于你自己的网页爬虫。我们将一起探索如何从无到有,一步步构建一个能够抓取、解析并存储网页数据的基础爬虫。文章不仅分享代码,更带你理解背后的逻辑,让你能在遇到问题时自行找到解决方案。无论你是编程新手还是有一定基础的开发者,这篇文章都会为你打开一扇通往数据世界的新窗。
|
2月前
|
数据采集 存储 JSON
从零到一构建网络爬虫帝国:HTTP协议+Python requests库深度解析
【7月更文挑战第31天】在网络数据的海洋中,使用Python的`requests`库构建网络爬虫就像探索未知的航船。HTTP协议指导爬虫与服务器交流,收集信息。HTTP请求包括请求行、头和体,响应则含状态行、头和体。`requests`简化了发送各种HTTP请求的过程。
69 4
|
2月前
|
数据采集 存储 API
在信息时代,Python爬虫用于自动化网络数据采集,提高效率。
【7月更文挑战第5天】在信息时代,Python爬虫用于自动化网络数据采集,提高效率。基本概念包括发送HTTP请求、解析HTML、存储数据及异常处理。常用库有requests(发送请求)和BeautifulSoup(解析HTML)。基本流程:导入库,发送GET请求,解析网页提取数据,存储结果,并处理异常。应用案例涉及抓取新闻、商品信息等。
82 2