python爬虫--06 Scrapy爬虫框架

1 介绍

爬虫框架:

实现爬虫功能的一个软件结构和功能组件集合
一个半成品,能够帮助用户实现专业网络爬虫

2 框架结构

在这里插入图片描述

数据流的三个路径:

(1)
    1.Engine从Spider处获得爬取请求(Request)
    2.Engine将爬取请求转发给Scheduler,用于调度
(2)
    3.Engine从Scheduler处获得下一个要爬取的请求
    4.Engine将爬取请求通过中间件发送给Downloader
    5.爬取网页后,Downloader形成响应(Response)通过中间件发给Engine
    6.Engine将收到的响应通过中间件发送给Spider处理
(3)
    7.Spider处理响应后产生爬取项(scraped Item)和新的爬取请求(Requests)给Engine
    8.Engine将爬取项发送给Item Pipeline(框架出口)
    9.Engine将爬取请求发送给Scheduler

各模块介绍

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

3 request VS .scrapy

相同点

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

不同点

request                    VS               .scrapy
页面级爬虫                                   网站级爬虫
功能库                                       框架
并发性考虑不足,性能较差                      并发性好,性能较高
重点在于页面下载                             重点在于爬虫结构
定制灵活                                    一般定制灵活,深度定制困难
上手十分简单                                入门稍难

定制程度很高的需求(不考虑规模),自搭框架,requests > Scrapy

4 常用命令

命令行模式

Scrapy是为持续运行设计的专业爬虫框架,提供操作的Scrapy命令行
命令行(不是图形界面)更容易自动化,适合脚本控制
本质上,Scrapy是给程序员用的,功能(而不是界面)更重要

常用命令

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

5 示例

5.1 创建工程

命令:scrapy startproject python123demo
    目录结构
    python123demo/-----------------外层目录
        scrapy.cfg-----------------部署Scrapy爬虫的配置文件
        python123demo/-------------Scrapy框架的用户自定义Python代码
            __init__.py------------初始化脚本
            items.py---------------Items代码模板(继承类)
            middlewares.py---------Middlewares代码模板(继承类)
            pipelines.py-----------Pipelines代码模板(继承类)
            settings.py------------Scrapy爬虫的配置文件
            __pycache__/-----------缓存目录,无需修改
            spiders/---------------Spiders代码模板目录(继承类)
                __init__.py--------初始文件,无需修改
                __pycache__/-------缓存目录,无需修改

5.2 创建爬虫

cd python123demo
scrapy genspider demo python123.io  ## 仅用于在spiders目录下生成demo.py,该文件也可以手工生成

demo.py文件内容
import scrapy

class DemoSpider(scrapy.Spider):       ##面向对象的类DemoSpider
    name = 'demo'   ## 当前爬虫名字
    allowed_domains = ['python123.io']  ##提交给命令行的域名,仅可爬取该域名及以下相关链接
    start_urls = ['http://python123.io/']  ## 一个或多个初始页面的地址
    def parse(self, response):   ## 解析页面的方法
        pass                   ## 形成字典类型

5.3 配置爬虫

    配置初始的Url地址
    配置获取页面后的解析方式

5.4 爬取数据

scrapy crawl demo  ## demo爬虫被执行,捕获页面存储在demo.html 

6 demo.py

代码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z8SSGPVI-1584359608052)(index_files/12.png)]
对比
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LopJDXYy-1584359608052)(index_files/13.png)]

发布了108 篇原创文章 · 获赞 7 · 访问量 5189

猜你喜欢

转载自blog.csdn.net/qq_25672165/article/details/104906620
今日推荐