Scrapy使用案例——爬取豆瓣Top 250电影数据

news2025/4/12 4:59:33

文章目录

    • 什么是Scrapy?
    • 创建Scrapy项目
    • 编写Scrapy Spider
    • 创建Item类
    • 配置数据存储
    • 运行Scrapy爬虫
    • 处理常见问题
    • 结论
      • Python技术资源分享
        • 1、Python所有方向的学习路线
        • 2、学习软件
        • 3、入门学习视频
        • 4、实战案例
        • 5、清华编程大佬出品《漫画看学Python》
        • 6、Python副业兼职与全职路线


在这里插入图片描述

什么是Scrapy?

Scrapy是一个基于Python的强大的开源网络爬虫框架,用于从网站上抓取信息。它提供了广泛的功能,使得爬取和分析数据变得相对容易。Scrapy的特点包括:

  • 强大的数据提取工具,支持XPath和CSS选择器。
  • 简化的HTTP请求和响应处理。
  • 可配置的下载中间件,用于处理不同类型的请求。
  • 数据存储支持,包括JSON、CSV、XML等。
  • 并发请求管理,提高效率。

创建Scrapy项目

要使用Scrapy来爬取网站,首先需要创建一个Scrapy项目。下面是创建一个名为douban_top250的Scrapy项目的步骤:

  1. 打开终端,导航到您想要创建项目的目录,并运行以下命令:
scrapy startproject douban_top250

  1. 进入项目目录:
cd douban_top250

  1. 创建一个用于爬取电影信息的Spider:
scrapy genspider douban_movie douban.com

现在,项目的基本结构已经创建,包括爬虫(Spider)模板文件。

编写Scrapy Spider

Spider是Scrapy项目中负责定义如何抓取信息的部分。需要编辑Spider文件,以指定要爬取的URL、如何处理响应和如何提取数据。

以下是一个示例Spider代码:

import scrapy
from douban_top250.items import DoubanTop250Item

class DoubanMovieSpider(scrapy.Spider):
    name = 'douban_movie'  # Spider的名称
    allowed_domains = ['douban.com']  # 允许爬取的域名
    start_urls = ['https://movie.douban.com/top250']  # 起始URL

    def parse(self, response):
        for movie in response.css('ol.grid_view li'):
            item = DoubanTop250Item()  # 创建一个DoubanTop250Item对象用于存储数据
            item['rank'] = movie.css('em::text').get()  # 提取电影排名
            item['title'] = movie.css('.title::text').get()  # 提取电影标题
            item['rating'] = movie.css('.rating_num::text').get()  # 提取电影评分
            item['link'] = movie.css('a::attr(href)').get()  # 提取电影链接
            yield item  # 返回Item以供后续处理

        next_page = response.css('.next a::attr(href)').get()  # 提取下一页的链接
        if next_page is not None:
            yield response.follow(next_page, self.parse)  # 继续爬取下一页


在这个Spider中,指定了Spider的名称(name)、允许的域名(allowed_domains)、起始URL(start_urls)以及如何解析响应的方法(parse)。使用CSS选择器来提取排名、标题、评分和链接等信息,并将它们保存到一个自定义的Item类中。

创建Item类

在Scrapy中,Item是用来定义要提取的数据结构的类。在的项目中,创建了一个DoubanTop250Item类,用于定义电影信息的数据结构。以下是Item类的代码:

import scrapy

class DoubanTop250Item(scrapy.Item):
    rank = scrapy.Field()
    title = scrapy.Field()
    rating = scrapy.Field()
    link = scrapy.Field()

在这个类中,定义了四个字段:排名(rank)、标题(title)、评分(rating)和链接(link)。这些字段将用于存储从网页上提取的数据。

配置数据存储

Scrapy允许您配置不同的数据存储选项,包括JSON、CSV、XML等格式。我选择将数据保存为JSON文件。

在项目的设置中,配置了FEEDS设置,以指定JSON文件的保存位置和格式:

FEEDS = {
    'douban_top250.json': {
        'format': 'json',
        'encoding': 'utf-8',
    },
}

这将数据以JSON格式保存到名为douban_top250.json的文件中。

运行Scrapy爬虫

一旦编写好Spider和Item类,并配置好数据存储选项,就可以运行Scrapy爬虫来抓取豆瓣Top 250电影数据了。运行以下命令:

scrapy crawl douban_movie

Scrapy将开始访问豆瓣电影网站的页面,抓取数据并保存为JSON文件。

拿到的数据如图:

WX20231025-170101@2x.png

处理常见问题

在爬取网站数据时,可能会遇到各种常见问题,如请求限制、页面解析问题和网络连接问题。以下是一些处理这些问题的一般指导:

  • 请求限制:如果您遇到HTTP状态码403(禁止访问)或其他请求限制问题,可以尝试设置合适的User-Agent、使用IP代理、限制请求速度以及尊重网站的robots.txt规则。

    本次遇到的问题: DEBUG: Crawled (403) <GET https://movie.douban.com/top250> (referer: None)

    解决方案: User-Agent设置:尝试在Scrapy中设置一个常见的浏览器User-Agent,以使请求看起来更像是由浏览器发出的。这可以通过在Spider中添加USER_AGENT设置来完成,如下: USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'

  • 页面解析问题:在编写Spider时,确保您的选择器和规则正确。经常检查网站的HTML结构,以适应可能的更改。

  • 网络连接问题:网络连接问题可能会导致请求超时或失败。确保您

的网络连接稳定,使用合理的超时设置,以及适当处理连接异常。

结论

使用Scrapy爬取豆瓣Top 250电影数据是一个很好的示例,展示了如何创建一个功能强大的网络爬虫,用于从网站上抓取数据。在本文中,涵盖了创建Scrapy项目、编写Spider、数据提取、保存为JSON文件以及处理常见问题的方方面面。Scrapy为爬虫开发者提供了强大的工具,使得数据抓取变得更容易。

源码已上传到Github:[github.com/SteamPunkMa…]


Python技术资源分享

小编是一名Python开发工程师,自己整理了一套 【最新的Python系统学习教程】,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。

保存图片微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

如果你是准备学习Python或者正在学习,下面这些你应该能用得上:

1、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

在这里插入图片描述

2、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

在这里插入图片描述

3、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

img

4、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

5、清华编程大佬出品《漫画看学Python》

用通俗易懂的漫画,来教你学习Python,让你更容易记住,并且不会枯燥乏味。

在这里插入图片描述

6、Python副业兼职与全职路线

在这里插入图片描述
这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

👉CSDN大礼包:《Python入门资料&实战源码&安装工具】免费领取安全链接,放心点击

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1344374.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【ArcGIS微课1000例】0082:地震灾害图件制作之DEM晕渲图(山体阴影效果)

以甘肃积石山县6.2级地震为例,基于震中100km范围内的DEM数据,制作数字高程模型山体阴影晕渲图。 文章目录 一、效果展示二、实验数据三、晕渲图制作一、效果展示 基于数字高程模型制作的山体阴影晕渲图如下所示: 二、实验数据 本试验所需要的数据包括: 1. 震中位置矢量数…

正确的认识 字节码文件

上一篇中认识了JVM的基本组成&#xff0c;我们说JVM只认识字节码文件。那么在字节码文件进入JVM之前&#xff0c;我们先认识了解字节码文件长什么样&#xff0c;我们作为工程师不需要去死扣底层的理论知识&#xff0c;但是我们只是需要正确的打开字节码文件 知道里面有哪些部分…

暗光增强——Zero-DCE网络推理测试

目录 一、Zero-DCE方法1.1 网络优点1.2 网络适用场景1.3 网络不适用场景 二、源码包三、测试四、测试结果五、推理速度六、总结 一、Zero-DCE方法 Zero-DCE&#xff08;Zero-Reference Deep Curve Estimation&#xff09;是一种用于低光照增强的网络。 1.1 网络优点 无需参考…

华为商城秒杀时加密验证 device_data 的算法研究

前言 之前华为商城放出 Mate60 手机时, 想给自己和家人抢购一两台&#xff0c;手动刷了好几天无果后&#xff0c;决定尝试编写程序&#xff0c;直接发送 POST 请求来抢。通过抓包和简单重放发送后&#xff0c;始终不成功。仔细研究&#xff0c;发现 Cookie 中有一个名为 devic…

提升效率:使用注解实现精简而高效的Spring开发

IOC/DI注解开发 1.0 环境准备1.1 注解开发定义bean步骤1:删除原XML配置步骤2:Dao上添加注解步骤3:配置Spring的注解包扫描步骤4&#xff1a;运行程序步骤5:Service上添加注解步骤6:运行程序知识点1:Component等 1.2 纯注解开发模式1.2.1 思路分析1.2.2 实现步骤步骤1:创建配置类…

基于ssm的教师上课系统+vue论文

目 录 目 录 I 摘 要 III ABSTRACT IV 1 绪论 1 1.1 课题背景 1 1.2 研究现状 1 1.3 研究内容 2 2 系统开发环境 3 2.1 vue技术 3 2.2 JAVA技术 3 2.3 MYSQL数据库 3 2.4 B/S结构 4 2.5 SSM框架技术 4 3 系统分析 5 3.1 可行性分析 5 3.1.1 技术可行性 5 3.1.2 操作可行性 5 3…

117基于matlab的短时傅里叶变换(STFT)、小波变换(WT)、同步压缩变换(SST)、瞬态提取变换(TET)进行时频分析

基于matlab的短时傅里叶变换&#xff08;STFT&#xff09;、小波变换&#xff08;WT&#xff09;、同步压缩变换&#xff08;SST&#xff09;、瞬态提取变换&#xff08;TET&#xff09;进行时频分析。程序已调通&#xff0c;可直接运行。 117时频分析短时傅里叶变换 (xiaohong…

eve环境虚拟机和电脑如何传送文件

一.桥接 &#xff08;实现电脑和虚拟机在同一网段&#xff09; 虚拟机上网盘设置 二.属性---文件共享设置 1打开属性&#xff0c;点击共享 2.添加共享人为全部人&#xff0c;并修改权限为读写模式 3.点击高级共享&#xff0c;选定此文件夹 4.点击网络和共享中心&#xff0c;划…

c语言:把二维数组降至一维|练习题

一、题目 把二维数组降为一围数组 如图&#xff1a; 二、代码截图【带注释】 三、源代码【带注释】 #include <stdio.h> int main() { int arr2[3][3];//设置二维数组 int arr1[10];//设置一维数组 int z0;//一维数组自增量 printf("输入一个二维数…

【源码】-MyBatis-如何系统地看源码

写在前面 前段时间做过一个项目&#xff0c;期间用到了动态数据源dynamic-datasource&#xff0c;经历了dbcp2的数据库连接池没有生效到排查定位、MyBatis多种数据库产品兼容、手写MyBatis拦截器等事情。 花费了好久&#xff0c;一直在打磨这篇文章&#xff08;不知道花费这么长…

DevEco Studio4.0 Beta2集成ArkUI-X(开发鸿蒙,安卓.ios应用)/ACE Tools脚手架

ArkUI-X简介 ArkUI-X进一步将ArkUI扩展到了多个OS平台&#xff1a;目前支持OpenHarmony、HarmonyOS、Android、 iOS&#xff0c;后续会逐步增加更多平台支持。开发者基于一套主代码&#xff0c;就可以构建支持多平台的精美、高性能应用 该框架对应的IDE版本为 4.0 Beta2 &…

代码随想录刷题 | Day1

今日学习目标 一、基础 数组 array类 模板类vector 数组是存放在连续内存空间上的相同类型数据的集合。 数组可以方便的通过下标索引的方式获取到下标下对应的数据。 需要两点注意的是 数组下标都是从0开始的。 数组内存空间的地址是连续的 而且大家如果使用C的话&…

Leetcode的AC指南 —— 哈希法/双指针:15. 三数之和

摘要&#xff1a; Leetcode的AC指南 —— 15. 三数之和。题目介绍&#xff1a;给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且…

腱鞘囊肿,不就是个水泡嘛?不!可别小瞧了它

腱鞘囊肿&#xff0c;很多人并不陌生&#xff0c;因为它的发病率比较高&#xff0c;不少人都有过腱鞘囊肿的经历。 有的人觉得不美观&#xff0c;有的人害怕癌变&#xff0c;有的人担心影响功能能&#xff0c;有的人经医生用力挤破好转&#xff0c;有的人经穿刺抽液治愈&#x…

使用element中el-cascader级联选择器动态懒加载以及回显 (单选)

<template><!-- 新增||修改弹框 --><el-dialog :close-on-click-modal"false" :close-on-press-escape"false" :title"title" :visible.sync"open"width"800px" append-to-body><el-form ref"for…

Unity | 快速修复Animation missing错误

目录 一、背景 二、效果 三、解决办法 一、背景 最近在做2D 骨骼动画相关的Demo&#xff0c;我自己使用Unity引擎进行骨骼绑定并创建了anim后&#xff0c;一切正常&#xff0c;anim也能播放。但是昨天我修改Obj及子物体的名称&#xff08;由中文改为英文&#xff0c;如&…

RabbitMQ 核心概念(交换机、队列、路由键),队列类型等介绍

RabbitMQ 核心概念(交换机、队列、路由键)&#xff0c;队列类型等介绍 RabbitMQ 是一个消息队列系统&#xff0c;它的核心概念包括交换机&#xff08;Exchange&#xff09;、队列&#xff08;Queue&#xff09;和路由键&#xff08;Routing Key&#xff09;&#xff0c;它们一起…

OpenStack云计算(-) 简介与部署Keystone

一.OpenStack简介 什么是云计算:云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问,进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件,服务) 云计算所包含的几个层次服务&#xff1a; SaaS ( Software as a Service ) :把在线软件作…

LLM提示词工程学习_Day01

LLM提示词工程学习_Day01 安装学习环境基础Conda环境安装安装Python安装所需的包Jupyter Notebook 安装获取OpenAI API KEY&#xff0c;并写入工程目录里的.env文件进入Jupyter&#xff0c;先跑一段代码 安装学习环境 基础Conda环境安装 conda环境安装&#xff0c;miniconda也…

omlox定位标准(二)——定位核心

上一篇文章中介绍了关于omlox hub相关内容&#xff0c;可以用于整合多种API接口&#xff0c;便于实现统一的应用&#xff0c;本文中介绍omlox core&#xff0c;介绍了基础设施、定位技术、定位引擎等内容。 2.omlox core zone and air-interface 随着越来越多的业务应用基于室…