首页 > 其他分享 >豆瓣电影信息爬虫【2024年6月】教程

豆瓣电影信息爬虫【2024年6月】教程

时间:2024-06-15 13:04:53浏览次数:13  
标签:doulist 请求 电影 爬虫 列表 2024 item 豆瓣

豆瓣电影信息爬虫【2024年6月】教程,赋完整代码

在本教程中,我们将使用以下技术栈来构建一个爬虫,用于爬取豆瓣电影列表页面的信息:

完整代码放到最后 ; 完整代码放到最后 ; 完整代码放到最后 ; 重要的事情说三遍。

1. 技术栈介绍

在本教程中,我们将使用以下技术栈来构建一个爬虫,用于爬取豆瓣电影列表页面的信息:

  • Python: 一种广泛使用的高级编程语言,因其简洁的语法和强大的库支持而受到开发者的喜爱。
  • Requests: 一个简单易用的HTTP库,用于发送各种HTTP请求。
  • PyQuery: 一个使Python像jQuery一样解析HTML文档的库。
  • 正则表达式 (re模块): Python内置的正则表达式库,用于字符串搜索和替换。

2. 环境搭建

在开始编写爬虫之前,需要确保你的开发环境中安装了Python以及上述提到的库。可以通过以下命令安装所需的库:

pip install requests pyquery

3. 代码逻辑概述

本爬虫的主要任务是从一个给定的豆瓣电影列表页面URL中提取电影的详细信息。以下是代码的主要逻辑流程:

  1. 发送HTTP请求:使用requests库向豆瓣电影列表页面发送GET请求。
  2. 检查响应状态:确保请求成功,即HTTP状态码为200。
  3. 解析HTML内容:使用PyQuery解析返回的HTML文档。
  4. 提取电影信息:遍历页面中的电影列表项,提取每部电影的相关信息。
  5. 数据存储与输出:将每部电影的信息存储在字典中,并添加到列表中,最后返回这个列表。

4. 详细代码解析

4.1 导入库
import requests
from pyquery import PyQuery as pq
import re

这里导入了所需的库,requests用于网络请求,PyQuery用于HTML解析,re用于正则表达式匹配。

4.2 定义爬虫函数
def doulist_crawler(url):
    # ...

定义了一个名为doulist_crawler的函数,它接受一个参数url,即豆瓣电影列表的URL。

4.3 设置请求头
headers = {
    'User-Agent': '...',
    'Accept': '...'
}

设置请求头,模拟浏览器访问,避免被服务器识别为爬虫。

4.4 发送GET请求
response = requests.get(url, headers=headers)

使用requests.get函数发送GET请求到指定的URL,并携带之前设置的请求头。

4.5 检查响应状态
if response.status_code == 200:
    # ...

检查HTTP响应状态码,如果为200,表示请求成功,继续执行;否则打印错误信息并返回空列表。

4.6 解析HTML内容
doc = pq(response.text)

使用PyQuery解析服务器返回的HTML内容。

4.7 提取电影信息
doulist_item_doc = doc(".doulist-item")
doulist = []
for item in doulist_item_doc.items():
    # ...

遍历页面中所有电影列表项(.doulist-item),并对每一项进行信息提取。

4.8 存储与返回电影信息
item_dict = {
    # ...
}
doulist.append(item_dict)

将每部电影的信息存储在一个字典中,然后将该字典添加到列表doulist中。

5. 运行爬虫和完整代码

最后,调用doulist_crawler函数,并传入豆瓣电影列表页面的URL,就可以得到一个包含所有电影信息的列表。

import requests
from pyquery import PyQuery as pq
import re

def doulist_crawler(url):
    '''
    此函数爬取豆瓣电影列表页面,并提取列出的电影的详细信息。
    该函数向指定的豆瓣电影列表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:
        print(f"请求失败,状态码:{response.status_code}")
        return []  # 如果请求失败,返回空列表

if __name__ == "__main__":
    move_list = doulist_crawler('https://www.douban.com/doulist/240962/')
    print(move_list)

6. 注意事项

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

通过本教程,你应该能够理解并运行这个豆瓣电影信息爬虫。如果有任何问题,欢迎随时提问。

标签:doulist,请求,电影,爬虫,列表,2024,item,豆瓣
From: https://blog.csdn.net/No_Name_Cao_Ni_Mei/article/details/139594759

相关文章

  • 如何入门Python爬虫,这就是答案!
    “入门”是良好的动机,但是可能作用缓慢。如果你手里或者脑子里有一个项目,那么实践起来你会被目标驱动,而不会像学习模块一样慢慢学习。另外如果说知识体系里的每一个知识点是图里的点,依赖关系是边的话,那么这个图一定不是一个有向无环图。因为学习A的经验可以帮助你学习B。因此,......
  • 如何选择开放式耳机?2024五大爆款机型安利!
    近期,开放式耳机市场扩张迅速,头部品牌早已布局此领域,而新晋品牌也争相进入,推出各自产品。面对众多的选项,消费者会面4选择的难题,需有足够了解才能选出理想耳机或辨识高性价比型号。评估关键在于音质、续航、舒适度及漏音控制等核心性能。以下将提供开放式耳机的精选购买指南,并推......
  • 【2024】 python下载快手无水印去水印视频
    无水印视频下载#coding=utf-8importrequestsimportreimportjson##url分享短视频链接#defdownload(url):headers={'User-Agent':util.window_user_agent}#获取短连接码sub=re.findall('https://v.kuaishou.com/\w{6}',......
  • 面试题整理20240614争分夺秒一寸光阴一寸金 忠于人品
    面试题整理20240614争分夺秒一寸光阴一寸金与智者交如如芝兰之室。不会嗓子变哑。所以择偶很重要,找一个人品性格好的人。而不是和外人说,对自己对象不会有好脾气。人品很差,脾气很差,不行。个人生活习惯讲卫生很重要。专心做好一件事。 我说的话,对方只会想着反驳,只会顾着他自己......
  • 【安装笔记-20240613-Linux-在 OpenWrt 的 LuCI界面支持命令行调试】
    安装笔记-系列文章目录安装笔记-20240613-Linux-在OpenWrt的LuCI界面支持命令行调试文章目录安装笔记-系列文章目录安装笔记-20240613-Linux-在OpenWrt的LuCI界面支持命令行调试前言一、软件介绍名称:ttyd主页官方介绍特点二、安装步骤测试版本:openwrt-23.05.3......
  • 【很全】PON/EPON/GPON/OAM/OMCI基本原理(2024最新)
    目录1PON前置知识1.1PON系统架构1.2PON应用场景(FTTx)1.3PON数据传输(TDM/TDMA)1.4PON设备介绍1.4.1OLT1.4.2ODN1.4.3ONU2PON协议规范2.1EPON2.1.1EPON协议栈2.1.1.1EPON帧结构2.1.1.2MPCP子层2.1.2EPON工作机制2.1.2.1EPON注册2.1.2.2EPON拓展OAM......
  • 持续总结中!2024年面试必问 20 道并发编程面试题(五)
    上一篇地址:持续总结中!2024年面试必问20道并发编程面试题(四)-CSDN博客九、什么是可重入锁(ReentrantLock)?可重入锁,也称作递归锁或再入锁,是一种同步机制,用于在多线程编程中控制对共享资源的访问。这种锁允许同一个线程多次获取同一个锁,而不会导致死锁。可重入锁通常由编程语言......
  • 持续总结中!2024年面试必问 20 道并发编程面试题(四)
    上一篇地址:持续总结中!2024年面试必问20道并发编程面试题(三)-CSDN博客七、请解释什么是原子操作。原子操作(AtomicOperation)是指在多线程环境中,一个操作或者一系列操作,要么完全执行,要么完全不执行,中间不会有其他线程的干扰。这意味着原子操作在执行过程中不会被其他线程中断,......
  • 20240610训练
    先增后减(inde)题面:有一个长度为\(n\)的正整数序列,每次可以交换相邻的两项,想要知道这个序列最少需要多少次交换才能变成一个先增后减的序列。先增后减:存在一个\(k\in[1,n]\)使得\([1,k]\)构成的子序列是单调不下降序列且\([k,N]\)构成的序列是单调不上升序列。题解:考虑每个最......
  • 浅谈2024年,计算机相关专业前景
    当然,对于计算机相关专业在2024年及未来的发展趋势,我们可以进一步细化分析和归纳:一、计算机相关专业的就业前景广泛的应用领域:计算机科学与技术、人工智能、网络安全、软件工程等专业具有广泛的应用领域,包括但不限于IT行业、电子商务、金融、教育等。这些领域在数字化转型的......