Scrapy爬虫框架

Scrapy是一款功能强大的分布式爬虫框架,支持高效并发爬取。本文介绍Scrapy的基本概念、核心组件及其工作流程,包括如何搭建项目、编写爬虫及配置Pipeline。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Scrapy介绍和使用

scrapy是一个快速功能强大的网络爬虫框架。
安装使用:pip install scrapy 、执行:scrapy -h

Scrapy不是一个函数功能库,而是一个爬虫框架,是实现爬虫功能的一个软件结构和功能集合,爬虫框架是半成品,能够帮助用户实现专业的网络爬虫。

Scrapy爬虫框架结构

分布式,5+2结构
在这里插入图片描述

框架结构解析

流程,数据流
在这里插入图片描述
数据流的三个路径

1.Engine从Spider处获得爬取请求(Request)
2.Engine将爬取请求转发给Scheduler,用于调度

3.Engine从Scheduler处获得下一个要爬取的请求
4.Engine将爬取请求通过中间件发送给Downloader
5.爬取网页后,Downloader形成响应(Response)通过中间件发给Engine
6.Engine将收到的响应通过中间件发送给Spider处理

7.Spider处理响应后产生爬取项(scraped Item)和新的爬取请求(Requests)给Engine
8.Engine将爬取项发送给Item Pipeline(框架出口)
9.Engine将爬取请求发送给Scheduler

数据流出口

Engine控制各模块数据流,不间断从Scheduler处获得爬取请求,直至请求为空
框架入口:Spider的初始爬取请求
框架出口:Item Pipeline

在这里插入图片描述

  • Engine:控制所有模块之间的数据流,根据条件触发事件,不需用户修改。
  • Dowloader:根据请求下载网页,不需用户修改。
  • Scheduler:对所有爬取请求进行调度管理,不需用户修改。
  • Downloader Middleware:实施施Engine、Scheduler和Downloader
    之间进行用户可配置的控制。修改、丢弃、新增请求或响应,用户可编写配置代码。
  • Spider:解析Downloader返回的响应(Response),产生爬取项(scraped item),产生额外的爬取请求(Request),需用户编写配置代码。
  • Item Pipelines:以流水线方式处理Spider产生的爬取项,由一组操作顺序组成,类似流水线,每个操作是一个Item Pipeline类型,可能操作包括:清理、检验和查重爬取项中的HTML数据、将数据存储到数据库,需要用户配置。
  • Spider Middleware:对请求和爬取项的再处理,修改、丢弃、新增请求或爬取项,用户可以编写配置代码。

Scrapy常用命令
在终端命令(黑色窗口)中运行 cmd----scrapy -h
Scrapy是为持续运行设计的专业爬虫框架,提供操作的Scrapy命令行,命令行适合脚本控制,scrapy给开发人员使用,功能更为重要。

命令——>说明——>格式
startproject   创建一个新工程  scrapy startproject <name> [dir]
genspider    创建一个爬虫   scrapy genspider [options] <name> <domain>
setting  获得爬虫配置信息  scrapy setting [options]
crawl  运行一个爬虫  scrapy crawl <spider>
list  列出工程中所有的爬虫  scrapy list
shell  启动URL调试命令行  scrapy  shell  [url]

如何选择使用

requests与Scrapy对比:
两者都可以进行页面请求和爬取,Python爬虫的两个重要技术路线
两者可用性都好,文档丰富,入门简单
两者都没有处理js、提交表单、应对验证码等功能(可扩展)

Scrapy是网站级爬虫,并发性好,性能较高,重点在于爬虫结构,一般定制灵活,深度定制困难,入门稍难

小需求使用requess库完成,不太小的需求,Scrapy框架,定制程度很高的需求,不考虑规模,需自搭框架。

Scrapy基本使用和工作流程

应用Scrapy爬虫框架主要是编写配置型代码

步骤1:建立一个Scrapy爬虫工程
命令为:scrapy startproject 创建的文件名

在这里插入图片描述
生成的工程目录:
在这里插入图片描述
分别对应的:

外层目录
部署Scrapy爬虫的配置文件
Scrapy框架的用户自定义Python代码
初始化脚本
Items代码模板(继承类)
Middlewares代码模板(继承类)
Pipelines代码模板(继承类)
Scrapy爬虫的配置文件
Spiders代码模板目录(继承类)
缓存目录,无需修改

步骤2:在工程中产生一个Scrapy爬虫
在这里插入图片描述
生成一个名称为demo的spider,在spiders目录下增加代码文件demo.py
在这里插入图片描述
生成的demo文件内容

import scrapy


class DemoSpider(scrapy.Spider):
    name = 'demo'
    allowed_domains = ['lizhe.net']
    start_urls = ['http://lizhe.net/']

    def parse(self, response):  
    #parse()用于处理响应,解析内容形成字典,发现新的URL爬取请求
        pass

步骤3:配置产生的spider爬虫

配置:(1)初始URL地址 (2)获取页面后的解析方式

import scrapy
class DemoSpider(scrapy.Spider):

    name = 'demo'
    #allowed_domains = ['lizhe.blog.csdn']
    def start_requests(self):
        urls = ['https://lizhe.blog.csdn.net/']
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        fname = response.url.split("/")[-1]
        with open(fname, "wb") as f:
            f.write(response.body)
        self.log("Saved file %s." % fname)

步骤4:运行爬虫,获取网页
cmd中命令:scrapy crawl demo
demo爬虫被执行,捕获页面存储在demo.html

yield关键字的使用
包含yield语句的函数是一个生成器,生成器每次产成一个值,函数被冻结,被唤醒后再产生一个值,生成器是一个不断产生值的函数。

def gen(n):
    for i in range(n):
        yield i**3
for i in gen(5):
    print(i, " ", end="")

在这里插入图片描述
生成器每调用一次在yield位置产生一个值,直到函数执行结束。

生成器优势特点:更节省存储空间,响应更迅速,使用更灵活。

Scrapy爬虫的使用步骤

步骤1:创建一个工程和Spider模板
步骤2:编写Spider
步骤3:编写Item Pipeline
步骤4:优化配置策略

Scrapy爬虫的数据类型
Request类、Response类、Item类

Request:
scrapy.http.Request() Request对象表示一个HTTP请,由Spider生成,由Downloader执行

Request属性或方法
.url    Request对应的请求URL地址
.method   对应的请求方法,"GET" "post"等
.headers   字典类型风格的请求头
.body   请求内容主体,字符串类型
.meta    用户添加的扩展信息,在Scrapy内部模块间传递信息使用
.copy()   复制该请求

Response:
scrapy.http.Response()Response对象表示一个HTTP响应,由Downloader生成,由Spider处理

Response属性或方法
.url    Response对应的URL地址
.status   HTTP状态码,默认是200
.headers  Response对应的头部信息
.body     Response对应的内容信息,字符串类型
.flags    一组标记
.request   产生Response类型对应的Request对象
.copy()    复制该响应

Item:
scrapy.item.Item()Item对象表示一个从HTML页面中提取的信息内容,由Spider生成,由Item Pipeline处理,Item类似字典类型,可以按照字典类型操作。

Scrapy爬虫支持多种HTML信息提取方法

  • Beautiful Soup
  • lxml
  • re
  • XPath Selector
  • CSS Selector

在这里插入图片描述

配置并实现Scrapy爬虫的步骤过程:
1.建立工程和Spider模板
2.编写Spider
3.编写Pipeline
4.再进行配置优化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值