0

0

Scrapy实战:爬取豆瓣电影数据和评分热度排名

WBOY

WBOY

发布时间:2023-06-22 13:49:40

|

2887人浏览过

|

来源于php中文网

原创

scrapy是一个开源的python框架,用于快速高效地爬取数据。在本文中,我们将使用scrapy爬取豆瓣电影的数据和评分热度排名。

  1. 准备工作

首先,我们需要安装Scrapy。您可以在命令行中输入以下命令来安装Scrapy:

pip install scrapy

接下来,我们将创建一个Scrapy项目。在命令行中,输入以下命令:

scrapy startproject doubanmovie

这将创建一个名为doubanmovie的Scrapy项目。然后,我们将进入项目目录并创建一个名为douban.py的Spider。在命令行中,输入以下命令:

cd doubanmovie
scrapy genspider douban douban.com

现在,我们已经有了一个可以使用的Spider。接下来,我们将定义Spider的行为以获取所需的数据。

  1. 爬取电影数据

我们将使用Spider来爬取豆瓣电影的数据。具体来说,我们将获取以下信息:

  • 电影名称
  • 导演
  • 演员
  • 类型
  • 国家
  • 语言
  • 上映日期
  • 片长
  • 评分
  • 评价人数

打开douban.py文件,我们将添加以下代码:

import scrapy

class DoubanSpider(scrapy.Spider):
    name = 'douban'
    allowed_domains = ['douban.com']
    start_urls = ['https://movie.douban.com/top250']

    def parse(self, response):
        movie_list = response.xpath('//div[@class="item"]')
        for movie in movie_list:
            yield {
                'name': movie.xpath('.//span[@class="title"]/text()').get(),
                'director': movie.xpath('.//div[@class="bd"]/p/text()[1]').get(),
                'actors': movie.xpath('.//div[@class="bd"]/p/text()[2]').get(),
                'genre': movie.xpath('.//div[@class="bd"]/p/text()[3]').get(),
                'country': movie.xpath('.//div[@class="bd"]/p/text()[4]').get(),
                'language': movie.xpath('.//div[@class="bd"]/p/text()[5]').get(),
                'release_date': movie.xpath('.//div[@class="bd"]/p/text()[6]').get(),
                'duration': movie.xpath('.//div[@class="bd"]/p/text()[7]').get(),
                'rating': movie.xpath('.//span[@class="rating_num"]/text()').get(),
                'num_reviews': movie.xpath('.//div[@class="star"]/span[@class="rating_num"]/text()').get(),
            }

在这个代码中,我们使用XPath来选取我们需要获取的信息。我们使用yield来生成这些信息,并使用return来将它们返回到用户。

如果我们现在运行我们的Spider(运行以下命令:scrapy crawl douban),它将爬取前250部电影的数据,并将它们返回到命令行中。

  1. 获取评分热度排名

现在,我们已经成功地获取了前250部电影的数据。接下来,我们将获取它们的评分热度排名。

InsCode
InsCode

InsCode 是CSDN旗下的一个无需安装的编程、协作和分享社区

下载

我们需要先创建一个新的Spider,来爬取豆瓣电影的TOP250列表。我们将使用此列表来获取电影的排名。

在douban.py文件中,我们将添加以下代码:

import scrapy

class DoubanSpider(scrapy.Spider):
    name = 'douban'
    allowed_domains = ['douban.com']
    start_urls = ['https://movie.douban.com/top250']

    def parse(self, response):
        movie_list = response.xpath('//div[@class="item"]')
        for movie in movie_list:
            yield {
                'name': movie.xpath('.//span[@class="title"]/text()').get(),
                'director': movie.xpath('.//div[@class="bd"]/p/text()[1]').get(),
                'actors': movie.xpath('.//div[@class="bd"]/p/text()[2]').get(),
                'genre': movie.xpath('.//div[@class="bd"]/p/text()[3]').get(),
                'country': movie.xpath('.//div[@class="bd"]/p/text()[4]').get(),
                'language': movie.xpath('.//div[@class="bd"]/p/text()[5]').get(),
                'release_date': movie.xpath('.//div[@class="bd"]/p/text()[6]').get(),
                'duration': movie.xpath('.//div[@class="bd"]/p/text()[7]').get(),
                'rating': movie.xpath('.//span[@class="rating_num"]/text()').get(),
                'num_reviews': movie.xpath('.//div[@class="star"]/span[@class="rating_num"]/text()').get(),
            }

        next_page = response.xpath('//span[@class="next"]/a/@href')
        if next_page:
            url = response.urljoin(next_page[0].get())
            yield scrapy.Request(url, callback=self.parse)

在代码中,我们使用了一个名为next_page的变量,来检查我们是否到达了最后一页。如果我们还没有到达最后一页,我们将继续爬取下一页。

接下来,我们需要更新parse方法,以获取电影的排名。我们将使用Python的enumerate函数来将排名与每部电影相关联。

在douban.py文件中,我们将替换原来的parse方法:

def parse(self, response):
        movie_list = response.xpath('//div[@class="item"]')
        for i, movie in enumerate(movie_list):
            yield {
                'rank': i + 1,
                'name': movie.xpath('.//span[@class="title"]/text()').get(),
                'director': movie.xpath('.//div[@class="bd"]/p/text()[1]').get(),
                'actors': movie.xpath('.//div[@class="bd"]/p/text()[2]').get(),
                'genre': movie.xpath('.//div[@class="bd"]/p/text()[3]').get(),
                'country': movie.xpath('.//div[@class="bd"]/p/text()[4]').get(),
                'language': movie.xpath('.//div[@class="bd"]/p/text()[5]').get(),
                'release_date': movie.xpath('.//div[@class="bd"]/p/text()[6]').get(),
                'duration': movie.xpath('.//div[@class="bd"]/p/text()[7]').get(),
                'rating': movie.xpath('.//span[@class="rating_num"]/text()').get(),
                'num_reviews': movie.xpath('.//div[@class="star"]/span[@class="rating_num"]/text()').get(),
            }

        next_page = response.xpath('//span[@class="next"]/a/@href')
        if next_page:
            url = response.urljoin(next_page[0].get())
            yield scrapy.Request(url, callback=self.parse)

现在,如果我们再次运行我们的Spider,它将获取前250部电影的数据,并将它们返回到命令行中。此时,我们将看到所有电影的排名。

  1. 结论

Scrapy是一种非常强大和灵活的工具,用于快速高效地爬取数据。在本文中,我们已经成功地使用Scrapy来爬取豆瓣电影的数据和评分热度排名。

我们使用Python代码和XPath来选择性获取网页上的信息,并使用yield语句来将其返回给用户。在整个过程中,Scrapy提供了一个简单而有效的方式来管理和爬取大量的数据,使我们能够快速地进行数据分析和处理。

相关专题

更多
云朵浏览器入口合集
云朵浏览器入口合集

本专题整合了云朵浏览器入口合集,阅读专题下面的文章了解更多详细地址。

0

2026.01.20

Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

20

2026.01.20

PS使用蒙版相关教程
PS使用蒙版相关教程

本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

62

2026.01.19

java用途介绍
java用途介绍

本专题整合了java用途功能相关介绍,阅读专题下面的文章了解更多详细内容。

87

2026.01.19

java输出数组相关教程
java输出数组相关教程

本专题整合了java输出数组相关教程,阅读专题下面的文章了解更多详细内容。

39

2026.01.19

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

10

2026.01.19

xml格式相关教程
xml格式相关教程

本专题整合了xml格式相关教程汇总,阅读专题下面的文章了解更多详细内容。

13

2026.01.19

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

19

2026.01.19

微信聊天记录删除恢复导出教程汇总
微信聊天记录删除恢复导出教程汇总

本专题整合了微信聊天记录相关教程大全,阅读专题下面的文章了解更多详细内容。

160

2026.01.18

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python Scrapy 网络爬虫实战视频教程
Python Scrapy 网络爬虫实战视频教程

共16课时 | 5.5万人学习

CSS3 教程
CSS3 教程

共18课时 | 4.7万人学习

Django 教程
Django 教程

共28课时 | 3.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号