Python 爬虫入门(九):Scrapy安装及使用「详细介绍」

news/2024/9/15 20:37:11/ 标签: python, 爬虫, scrapy

Python 爬虫入门(九):Scrapy安装及使用「详细介绍」

  • 前言
  • 1. Scrapy 简介
  • 2. Scrapy 的安装
    • 2.1 环境准备
    • 2.2 安装 Scrapy
  • 3. 创建 Scrapy 项目
    • 3.1 创建项目
    • 3.2 项目结构简介
  • 4. 编写爬虫
  • 5. 存储数据
    • 5.1 存储为 JSON 文件
    • 5.2 存储到数据库
      • 5.2.1 MongoDB
  • 6. 处理请求和响应
    • 6.1 请求头设置
    • 6.2 处理响应
  • 7. 高级功能
    • 7.1 使用中间件
    • 7.2 使用代理
    • 7.3 使用管道处理数据
  • 8. 常见问题及解决方法
    • 8.1 爬虫被封禁
    • 8.2 数据解析错误
    • 8.3 数据存储失败
  • 总结

前言

  • 欢迎来到“Python 爬虫入门”系列的第九篇文章。本篇文章将深入介绍 Scrapy 的安装及使用。Scrapy 是一个广泛使用的爬虫框架,其强大的功能和灵活的扩展性使得它在数据抓取领域占有重要地位。
  • 本文将从 Scrapy 的安装步骤开始,详细介绍其基本使用方法,包括创建项目、编写爬虫、解析数据、存储数据等内容。通过本篇文章的学习,你将能够掌握使用 Scrapy 进行高效数据抓取的技能。

1. Scrapy 简介

Scrapy 是一个用于抓取 Web 数据的应用框架。与其他 Python 爬虫库(如 BeautifulSoup 和 requests)相比,Scrapy 提供了更高的抓取速度、更强的扩展性和更便捷的项目管理方式。Scrapy 框架包含了数据抓取、处理和存储的一整套工具,使得用户能够更高效地完成爬虫任务。

2. Scrapy 的安装

2.1 环境准备

在安装 Scrapy 之前,请确保你的计算机已经安装了以下环境:

  1. Python 3.6 及以上版本
  2. pip 包管理工具

2.2 安装 Scrapy

使用 pip 命令可以方便地安装 Scrapy:

pip install scrapy

安装完成后,可以通过以下命令验证 Scrapy 是否安装成功:

scrapy

如果安装成功,你将看到 Scrapy 的版本信息。

3. 创建 Scrapy 项目

3.1 创建项目

在命令行中,导航到你希望存放项目的目录,并运行以下命令来创建一个新的 Scrapy 项目:

scrapy startproject myproject

此命令将在当前目录下创建一个名为 myproject 的文件夹,文件夹结构如下:

myproject/scrapy.cfgmyproject/__init__.pyitems.pymiddlewares.pypipelines.pysettings.pyspiders/__init__.py

3.2 项目结构简介

  • scrapy.cfg: Scrapy 项目的配置文件。
  • myproject/: 项目的 Python 模块,之后会在此加入代码。
  • items.py: 定义爬取的数据结构。
  • middlewares.py: 定义 Scrapy 中间件。
  • pipelines.py: 定义数据处理管道。
  • settings.py: 定义项目的配置。
  • spiders/: 存放爬虫代码的目录。

4. 编写爬虫

4.1 创建爬虫

spiders/ 目录下创建一个新的爬虫文件,例如 example_spider.py,并编写以下内容:

python">import scrapyclass ExampleSpider(scrapy.Spider):name = 'example'start_urls = ['https://jsonplaceholder.typicode.com/posts']def parse(self, response):for post in response.json():yield {'userId': post['userId'],'id': post['id'],'title': post['title'],'body': post['body']}

4.2 解析数据

parse 方法中,我们解析响应内容并提取所需的数据。response.json() 方法将响应内容解析为 JSON 格式,便于我们提取数据。

4.3 运行爬虫

在项目的根目录下,运行以下命令来启动爬虫

scrapy crawl example

如果一切正常,你将看到爬虫开始抓取数据,并在控制台输出抓取到的内容。

5. 存储数据

5.1 存储为 JSON 文件

Scrapy 提供了多种存储抓取数据的方法,这里介绍将数据存储为 JSON 文件的方法。在命令行中运行以下命令:

scrapy crawl example -o output.json

此命令将抓取的数据保存到 output.json 文件中。

5.2 存储到数据库

我们也可以将抓取的数据存储到数据库中,例如 MongoDB 或 MySQL。在 pipelines.py 文件中编写数据存储的逻辑。

5.2.1 MongoDB

首先,安装 pymongo 库:

pip install pymongo

然后在 pipelines.py 中添加以下代码:

python">import pymongoclass MongoPipeline:def __init__(self):self.client = pymongo.MongoClient('localhost', 27017)self.db = self.client['scrapy_db']self.collection = self.db['scrapy_collection']def process_item(self, item, spider):self.collection.insert_one(dict(item))return item

settings.py 中启用该管道:

python">ITEM_PIPELINES = {'myproject.pipelines.MongoPipeline': 300,
}

6. 处理请求和响应

6.1 请求头设置

为了模拟真实用户的浏览行为,我们可以在爬虫中设置请求头。在爬虫文件中添加 headers 属性:

python">class ExampleSpider(scrapy.Spider):name = 'example'start_urls = ['https://jsonplaceholder.typicode.com/posts']headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'}def start_requests(self):for url in self.start_urls:yield scrapy.Request(url, headers=self.headers, callback=self.parse)

6.2 处理响应

parse 方法中,我们可以根据需要处理响应数据。这里的示例中,我们将 JSON 数据解析并提取需要的字段。

7. 高级功能

7.1 使用中间件

Scrapy 中间件可以在请求和响应之间执行一些自定义的处理逻辑。例如,我们可以使用中间件来处理请求的重试逻辑、设置代理等。

middlewares.py 中添加以下示例代码:

python">from scrapy import signalsclass CustomMiddleware:@classmethoddef from_crawler(cls, crawler):s = cls()crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)return sdef process_request(self, request, spider):request.headers['User-Agent'] = 'Custom User-Agent'def process_response(self, request, response, spider):return responsedef process_exception(self, request, exception, spider):passdef spider_opened(self, spider):spider.logger.info('Spider opened: %s' % spider.name)

settings.py 中启用中间件:

python">DOWNLOADER_MIDDLEWARES = {'myproject.middlewares.CustomMiddleware': 543,
}

7.2 使用代理

有时我们需要通过代理来抓取数据。Scrapy 支持通过中间件设置代理。在 middlewares.py 中添加以下代码:

python">class ProxyMiddleware:def process_request(self, request, spider):request.meta['proxy'] = 'http://your_proxy_address'

settings.py 中启用该代理中间件:

python">DOWNLOADER_MIDDLEWARES = {'myproject.middlewares.ProxyMiddleware': 543,
}

7.3 使用管道处理数据

数据管道用于处理和存储抓取的数据。在 pipelines.py 中定义数据管道,并在 settings.py 中启用它。

8. 常见问题及解决方法

8.1 爬虫被封禁

当我们抓取某些网站时,可能会遇到 IP 被封禁的情况。为了解决这个问题,我们可以使用代理轮换、设置合理的抓取间隔时间等方法。

8.2 数据解析错误

在解析数据时,可能会遇到数据结构变化或数据格式不匹配的情况。为了应对这些问题,我们可以在解析过程中加入异常处理机制,确保程序在遇到错误时不会崩溃。

8.3 数据存储失败

在将数据存储到数据库或文件时,可能会遇到存储失败的情况。常见的原因包括数据库连接问题、数据格式不匹配等。通过日志记录和异常处理,可以更好地定位和解决这些问题。

总结

通过本文的学习,我们深入了解了 Scrapy 的安装和使用方法。Scrapy 作为一个功能强大的爬虫框架,能够帮助我们高效地抓取和处理网页数据。从项目创建、编写爬虫、解析数据到数据存储,我们一步步学习了 Scrapy 的基本使用方法,并介绍了一些高级功能和常见问题的解决方法。


http://www.ppmy.cn/news/1506103.html

相关文章

【书生大模型实战营第三期 | 入门岛第3关-Git 基础知识】

学习Git版本控制系统心得体会 摘要 通过参与InternLM Git教程,我对Git这一开源的分布式版本控制系统有了更深入的理解和实践。Git以其高效的团队协作能力、详尽的代码历史记录以及灵活的分支管理功能,成为软件开发中不可或缺的工具。 文章大纲 Git简介…

双指针算法(一)

一、移动零 题目链接 题目详情: 1.算法分析 这道题采用的算法原理是双指针算法:利用数组下标当做指针。 利用双指针算法的目的就是进行数组划分、数组分块。 我们先定义一个下标cur和一个下标dest。 两个指针的作用: cur:从左至右的进…

Midjourney V6.1更新 | 细节狂魔,绝美人像(附提示词)

前言 Midjourney V6.1版本,堪称细节狂魔,在人像上简直登峰造极! 自V6.1版本更新以来我一次次被Midjourney生成的人像震惊到!用Midjourney官网分享的提示词微调,生成图像,每一张都绝美,晚上玩到…

LeetCode题练习与总结:查找重复的电子邮箱--182

一、题目描述 SQL Schema > Pandas Schema 表: Person ---------------------- | Column Name | Type | ---------------------- | id | int | | email | varchar | ---------------------- id 是该表的主键(具有唯一值的列&#xff0…

【区块链+医疗健康】基于区块链的中药饮片流转质量服务与监管平台 | FISCO BCOS应用案例

有数据显示,医疗机构委托第三方代煎代配业务已经占到医院代煎业务总量的 92.3%。委托代煎业务虽然方便了 医疗机构和患者,但业务过程牵涉处方外流,业务范围从“医院 - 患者”扩展到“医院 - 中药代煎中心 - 物流 - 患者”, 涉及到…

从混沌到秩序:一本书教你掌握互联网内容审核与信息安全的密钥

随着互联网技术的迅猛发展,视频、图片、文字等多媒体内容以前所未有的速度在全球范围内传播与分享,极大地丰富了人们的信息获取渠道和娱乐生活方式。然而,这一繁荣景象背后,也隐藏着内容安全、版权侵犯、虚假信息传播、不良内容泛…

Docker深入讲解

Docker深入讲解 目录 概述Docker基本概念 2.1 什么是Docker2.2 Docker的核心组件2.3 Docker与传统虚拟化技术的比较 Docker安装与配置 3.1 安装Docker3.2 配置Docker3.3 验证Docker安装 Docker镜像 4.1 什么是Docker镜像4.2 获取和管理镜像4.3 Dockerfile的使用4.4 构建镜像 …

react学习笔记:7

预览:(fetch发送请求、SPA、连续解构赋值、消息订阅、react router路由第三方库) 1、连续解构赋值 总结: 1、连续解构赋值的写法:对象包对象,第二个解构的value一定也是在{}内部的写法 2、消息订阅发布 …

【算法速刷(5/100)】LeetCode —— 20.有效的括号

题目要求比较明晰简洁&#xff0c;编码难度并不算高 下面贴出代码和思路 bool isValid(string s) {stack<char> stk;for(const char& c : s){if(stk.empty()){stk.push(c);continue;}if(c ( || c [ || c {){stk.push(c);continue;}else{char top stk.top();boo…

Python学习(1):使用Python的Dask库实现并行计算

目录 一、Dask介绍 二、使用说明 安装 三、测试 1、单个文件中实现功能 2、运行多个可执行文件 最近在写并行计算相关部分&#xff0c;用到了python的Dask库。 Dask官网&#xff1a;Dask | Scale the Python tools you love 一、Dask介绍 Dask是一个灵活的并行和分布式…

nginx日志解析

Nginx 的日志默认参数包括访问日志&#xff08;Access Log&#xff09;和错误日志&#xff08;Error Log&#xff09;。以下是对这些默认参数的详细解析&#xff1a; 1. 访问日志&#xff08;Access Log&#xff09; 访问日志记录了每个客户端请求的详细信息&#xff0c;包括…

mmdebstrap:创建 Debian 系统 chroot 环境的利器 ️

文章目录 mmdebstrap 的一般性参数说明 &#x1f4dc;mmdebstrap 的常见用法示例 &#x1f308;使用 mmdebstrap 的注意事项 ⚠️ &#x1f308;你好呀&#xff01;我是 山顶风景独好 &#x1f388;欢迎踏入我的博客世界&#xff0c;能与您在此邂逅&#xff0c;真是缘分使然&am…

2017-架构师案例(九)

某软件企业受该省教育部门委托建设高校数字化教育教学资源共享平台&#xff0c;实现以众筹众创的方式组织省内普通高校联合开展教育教学资源内容建设&#xff0c;实现全省优质教学资源整合和共享。该资源共享平台的主要功能模块包括: (1)统一身份认证模块:提供统一的认证入口&…

一、安装go环境以及编译输出HelloWorld

目前的热门技术方向从分布式微服务开始转向云原生而云原生方向需要掌握GO语言&#xff0c;基于此决定利用平时的时间来完成GO语言的学习。 安装&#xff08;基于mac m1&#xff09; &#xff08;翻看了网上很多的资料&#xff0c;发现很多人记录的有很多问题&#xff0c;一个…

左神学习笔记-岛屿数量问题(java版算法)

目录 1. 问题描述2. 解决方法3. 拓展进阶问题4. 参考链接 1. 问题描述 题目&#xff1a;一个矩阵中只有0和1两个值&#xff0c;每个位置都可以和自己的上下左右四个位置相连&#xff0c;如果有一片1连在一起&#xff0c;这一部分叫做一个岛&#xff0c;求一个矩阵中有多少岛&a…

uBlock Origin很快将无法在Chrome上使用 开发者发布情况说明

Chrome v127 版开始扩展程序页面将自动显示即将不再支持的扩展程序&#xff0c;包括知名的广告拦截扩展程序 uBlock Origin 也在谷歌的警告列表中。昨天 uBO 团队发布新的支持文档对目前的情况进行说明&#xff0c;简单来说就是 Chrome 将不再支持基于 Manifest v2 开发的扩展程…

前端构建工具|vite快速入门

认识vite vite组成部分 Vite是一种新型前端构建工具&#xff0c;能够显著提升前端开发体验。它主要由两部分组成&#xff1a; 一个开发服务器&#xff0c;它基于 原生 ES 模块 提供了 丰富的内建功能&#xff0c;如速度快到惊人的 模块热更新&#xff08;HMR&#xff09;。一…

Java-数据库基本概念

数据库DataBase 定义: 保存一组数据的仓库就是数据库 例 BirdBoot项目中&#xff0c;我们为了保存一组用户信息&#xff0c;创建了一个目录users。里面用若干个文件保存每一个用户信息 此时users目录就可以称为是一个数据库 只不过对于这些数据的维护操作&#xff0c;要么…

Internet Download Manager(IDM)2024中文版本有哪些新功能?6.42版本功能介绍

1. Internet Download Manager&#xff08;IDM&#xff09;是一款功能强大的下载管理器&#xff0c;支持所有流行的浏览器&#xff0c;并可提升下载速度高达5倍。 2. IDM具有智能下载逻辑加速器&#xff0c;可以设置文件下载优先级、分块下载等&#xff0c;提高下载效率。 IDM…

gitlab给用户添加项目权限

1.进入管理员界面 2.进入群组 3.添加用户