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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 使用Python和`requests`、`PyQuery`库,本文教程教你如何编写一个豆瓣电影列表页面的爬虫,抓取电影标题、导演、主演等信息。首先确保安装所需库,然后了解技术栈,包括Python、Requests、PyQuery和正则表达式。爬虫逻辑包括发送HTTP请求、解析HTML、提取数据。代码示例展示了如何实现这一过程,最后运行爬虫并将结果保存为JSON文件。注意遵守网站使用条款和应对反爬策略。

豆瓣电影信息爬虫教程

摘要

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

目标网址:https://www.douban.com/doulist/240962/

image-20240611143649561.png

目录

环境搭建

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

pip install requests pyquery

技术栈介绍

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

爬虫逻辑概述

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

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

详细代码解析

import requests
from pyquery import PyQuery as pq
import re
import json
from datetime import datetime

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/')
    json_data = json.dumps(move_list, ensure_ascii=False)
    print(json_data)
    # 将JSON数据写入到文件中
    filename = f"电影列表{datetime.now().strftime('%Y%m%d%H%M%S')}.json"
    with open(filename, 'w', encoding='utf-8') as file:
        # 写入JSON数据,ensure_ascii=False 确保汉字不转义
        json.dump(json.loads(json_data), file, ensure_ascii=False, indent=4)

    print(f"JSON数据已写入到文件:{filename}")

导入库

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:

move_list = doulist_crawler('https://www.douban.com/doulist/240962/')
json_data = json.dumps(move_list, ensure_ascii=False)
print(json_data)
# 将JSON数据写入到文件中
filename = f"电影列表{datetime.now().strftime('%Y%m%d%H%M%S')}.json"
with open(filename, 'w', encoding='utf-8') as file:
    # 写入JSON数据,ensure_ascii=False 确保汉字不转义
    json.dump(json.loads(json_data), file, ensure_ascii=False, indent=4)

    print(f"JSON数据已写入到文件:{filename}")

image-20240611144658847.png

注意事项

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

结论

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

目录
相关文章
|
15天前
|
数据采集 JavaScript C#
C#图像爬虫实战:从Walmart网站下载图片
C#图像爬虫实战:从Walmart网站下载图片
|
2月前
|
数据采集 存储 C#
C# 爬虫技术:京东视频内容抓取的实战案例分析
C# 爬虫技术:京东视频内容抓取的实战案例分析
|
15天前
|
数据采集 API 开发者
🚀告别网络爬虫小白!urllib与requests联手,Python网络请求实战全攻略
在网络的广阔世界里,Python凭借其简洁的语法和强大的库支持,成为开发网络爬虫的首选语言。本文将通过实战案例,带你探索urllib和requests两大神器的魅力。urllib作为Python内置库,虽API稍显繁琐,但有助于理解HTTP请求本质;requests则简化了请求流程,使开发者更专注于业务逻辑。从基本的网页内容抓取到处理Cookies与Session,我们将逐一剖析,助你从爬虫新手成长为高手。
39 1
|
5天前
|
数据采集
做个爬虫吧:豆瓣《八佰》影评
做个爬虫吧:豆瓣《八佰》影评
14 0
|
1月前
|
数据采集 存储 前端开发
Java爬虫开发:Jsoup库在图片URL提取中的实战应用
Java爬虫开发:Jsoup库在图片URL提取中的实战应用
|
2月前
|
数据采集 存储 XML
Python 爬虫实战:从入门到精通
【8月更文挑战第28天】本文将带你进入Python爬虫的世界,从基础概念到实战操作,一步步教你如何用Python编写一个高效的网络爬虫。你将学习到如何解析网页、提取数据、存储数据以及应对反爬策略等技能。无论你是初学者还是有一定经验的开发者,都能在这篇文章中找到有价值的信息和技巧。让我们一起探索Python爬虫的奥秘吧!
|
2月前
|
数据采集 存储 前端开发
豆瓣评分9.0!Python3网络爬虫开发实战,堪称教学典范!
今天我们所处的时代是信息化时代,是数据驱动的人工智能时代。在人工智能、物联网时代,万物互联和物理世界的全面数字化使得人工智能可以基于这些数据产生优质的决策,从而对人类的生产生活产生巨大价值。 在这个以数据驱动为特征的时代,数据是最基础的。数据既可以通过研发产品获得,也可以通过爬虫采集公开数据获得,因此爬虫技术在这个快速发展的时代就显得尤为重要,高端爬虫人才的收人也在逐年提高。
|
1月前
|
数据采集 存储 JavaScript
Python 爬虫实战:从入门到精通
【8月更文挑战第31天】 本文将带你走进 Python 爬虫的世界,从基础的请求和解析开始,逐步深入到反爬策略的应对和数据存储。我们将通过实际案例,一步步构建一个功能完整的爬虫项目。无论你是编程新手还是有一定经验的开发者,都能在这篇文章中找到适合自己的学习路径。让我们一起探索数据的海洋,揭开网络信息的神秘面纱。
|
2月前
|
数据采集 JavaScript 前端开发
Python 爬虫实战:抓取和解析网页数据
【8月更文挑战第31天】本文将引导你通过Python编写一个简单的网络爬虫,从网页中抓取并解析数据。我们将使用requests库获取网页内容,然后利用BeautifulSoup进行解析。通过本教程,你不仅能够学习到如何自动化地从网站收集信息,还能理解数据处理的基本概念。无论你是编程新手还是希望扩展你的技术工具箱,这篇文章都将为你提供有价值的见解。
|
2月前
|
数据采集 存储 监控
用爬虫技术玩转石墨文档:自动化数据处理与信息提取的新探索
在当今数字化时代,文档协作与管理成为了职场人士日常工作中不可或缺的一部分。石墨文档,作为一款功能强大的在线文档工具,凭借其云端存储、多人实时协作、丰富的文档格式支持等特点,赢得了广泛的用户群体。然而,随着数据量的激增,如何高效地管理和利用这些数据成为了一个亟待解决的问题。此时,爬虫技术便成为了我们玩转石墨文档、实现自动化数据处理与信息提取的强大工具。
下一篇
无影云桌面