• 豆瓣电影信息爬虫实战-2024年6月


    豆瓣电影信息爬虫教程

    摘要

    本文将详细介绍如何使用Python编写一个爬虫程序,用于抓取豆瓣电影列表页面上的电影详细信息。通过本教程,你将学习到如何使用requestsPyQuery库来发送HTTP请求、解析HTML内容,并提取所需的数据。

    目录

    环境搭建

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

    pip install requests pyquery
    

    技术栈介绍

    • Python: 一种易于学习且功能强大的编程语言。
    • Requests: 用于发送HTTP请求的库。
    • PyQuery: 类似于jQuery的库,用于解析HTML文档。
    • re (正则表达式): 用于字符串搜索和匹配。

    爬虫逻辑概述

    本爬虫的主要任务是从一个给定的豆瓣电影列表页面URL中提取电影的详细信息,包括:

    • 电影标题
    • 导演
    • 主演
    • 类型
    • 制作地区
    • 发行年份
    • 评分数量
    • 每部电影的详细URL

    详细代码解析

    import requests
    from pyquery import PyQuery as pq
    import re
    
    def doulist_crawler(url):
        '''
        联系方式:
        wx: Wusp1994
        企鹅号: 812190146
        此函数爬取豆瓣电影列表页面,并提取列出的电影的详细信息。
        该函数向指定的豆瓣电影列表URL发送GET请求,并使用预定义的头部信息来模拟浏览器请求。如果请求成功,它将使用PyQuery解析HTML内容,并提取电影的详细信息,如标题、导演、主演、类型、地区、年份、评分和评分数量。每部电影的信息存储在一个字典中,并添加到名为'doulist'的列表中。然后打印出详细信息。
        提取的数据包括:
        - 电影标题
        - 导演
        - 主演
        - 类型
        - 制作地区
        - 发行年份
        - 评分数量
        - 每部电影的详细URL
        参数:
            url (str): 要爬取的豆瓣-豆列的电影列表页面的URL。
            https://www.douban.com/doulist/240962/
        返回:
            list: 包含每部电影详细信息的字典组成的列表。
        :return:
        '''
        # 定义请求头
        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(url, headers=headers)
    
        # 确保请求成功
        if response.status_code == 200:
            # 使用 PyQuery 解析网页内容
            doc = pq(response.text)
            doulist_item_doc = doc(".doulist-item")
            doulist = []
            for item in doulist_item_doc.items():
                item_dict = {}
                # 初始化变量
                director = None
                starring = None
                genre = None
                region = None
                year = None
                detail_url = item(".title a").attr("href")
                title = item(".title a").text()
                rating_nums = item(".rating_nums").text()
                rating_count_text = item('.rating span:contains("人评价")').text()
                rating_count = int(re.search(r'\d+', rating_count_text).group(0))
                lines = item('div.abstract').text().split('\n')
                for line in lines:
                    if '导演' in line:
                        director = line.split('导演:')[-1].strip()
                    elif '主演' in line:
                        starring = line.split('主演:')[-1].strip()
                    elif '类型' in line:
                        genre = line.split('类型:')[-1].strip()
                    elif '制片国家/地区' in line:
                        region = line.split('制片国家/地区:')[-1].strip()
                    elif '年份' in line:
                        year = line.split('年份:')[-1].strip()
    
                item_dict['director'] = director
                item_dict['starring'] = starring
                item_dict['genre'] = genre
                item_dict['region'] = region
                item_dict['year'] = year
                item_dict['detail_url'] = detail_url
                item_dict['title'] = title
                item_dict['rating_count'] = rating_count
                doulist.append(item_dict)
    
            return doulist  # 返回电影列表
        else:
            # 联系方式:
            # wx: Wusp1994
            # 企鹅号: 812190146
            print(f"请求失败,状态码:{response.status_code}")
            return []  # 如果请求失败,返回空列表
    
    if __name__ == "__main__":
        # 联系方式:
        # wx: Wusp1994
        # 企鹅号: 812190146
        move_list = doulist_crawler('https://www.douban.com/doulist/240962/')
        print(move_list)
    

    导入库

    import requests
    from pyquery import PyQuery as pq
    import re
    

    定义爬虫函数

    def doulist_crawler(url):
        # 函数定义,接受一个豆瓣电影列表页面的URL
    

    设置请求头

    headers = {
        'User-Agent': '...',
        'Accept': '...'
    }
    

    发送GET请求

    response = requests.get(url, headers=headers)
    

    检查响应状态

    if response.status_code == 200:
        # 请求成功,继续处理
    

    解析HTML内容

    doc = pq(response.text)
    

    提取电影信息

    遍历电影列表项,提取每部电影的相关信息:

    for item in doulist_item_doc.items():
        # 提取信息并存储到字典
    

    存储与返回电影信息

    doulist.append(item_dict)
    return doulist
    

    运行爬虫

    要运行爬虫,只需调用doulist_crawler函数,并传入豆瓣电影列表页面的URL:

    movies = doulist_crawler('https://www.douban.com/doulist/240962/')
    print(movies)
    

    注意事项

    • 遵守豆瓣的使用条款,避免频繁请求。
    • 考虑网站的反爬虫机制,可能需要使用代理或更新请求头。
    • 爬取的数据仅用于个人学习和研究,不得用于商业用途。

    结论

    通过本文,你已经学习了如何使用Python编写一个简单的爬虫来抓取豆瓣电影信息。这是一个实践网络请求和HTML解析的好机会。希望本文对你有所帮助,祝你编程愉快。

  • 相关阅读:
    vivado 通过修改调试核 (ILA) 来进行增量编译
    如何高效获取电商数据
    zerotier-one自建根服务器方法二
    【linux进程(四)】僵尸进程和孤儿进程概念&进程优先级讲解
    缓存击穿、缓存穿透、缓存雪崩、反向代理的概念
    【小尘送书-第五期】《巧用ChatGPT快速提高职场晋升力》用ChatGPT快速提升职场能力,全面促进自身职业发展
    ES索引误删的名场面
    旅游景区度假村展示型网站如何建设渠道品牌
    【Python测试开发】断言
    多目标条件下矿山充填材料配比优化
  • 原文地址:https://blog.csdn.net/qq_36463299/article/details/139595531