Advertisement

Scrapy 爬虫框架初体验一 —— 网络爬虫及其框架介绍

阅读量:

该文档介绍了网络爬虫的基本概念及其重要性,并详细讲解了Scrapy框架的功能与组件。首先,网络爬虫用于从Web上自动下载网页并提取有用数据;其次,Scrapy是一个基于Python的快速、高层次框架,用于构建高效的Web抓取程序;最后,文档详细描述了Scrapy的常用组件(如命令行工具、Shell界面)及其支持的功能(如动态网页处理、图片文件下载)。此外,还介绍了Scrapy提供的多种爬虫类型(如基本Spider和通用Spider),并解释了它们各自的适用场景及工作原理。

一、框架概述

网络爬虫介绍

在介绍框架之前,简单介绍一下网络爬虫(Web Crawler)。

在上网的过程中(尤其是在多设备同时使用的情况下),我们通常会遇到大量分散在不同网页上的信息来源问题。面对这种情况,在进行工作研究或数据收集时(尤其是在处理大量数据的情况下),单纯依靠人工操作进行信息收集会显得效率低下且费力不讨好。是否有一种能够高效自动获取大量相关网页数据的方法?目前广泛采用的技术手段之一就是所谓的网络爬虫技术。

网络爬虫是一种从Web上自动获取网页的程序——它接收一个或多个初始网页作为输入,并执行下载、分析和扫描等处理步骤以获取新的链接。对于指向未被下载的网页链接,则将其加入位于中央的URL队列中。接着系统会循环选择队列中的下一个未处理网页进行抓取……直至所有相关网页都被访问并下载完毕为止。在这个过程中,系统会对这些信息进行提取和整理,并按照一定的结构存储起来。

实际上我们所了解的主要搜索引擎(百度Google等)都采用了网络爬虫技术这一核心技术支撑了现代搜索引擎的发展进程

Scrapy是什么

Scrapy 基于 Python 语言构建为一个高效且高级别的网络抓取框架。
该框架旨在从网页中提取结构化数据,并实现高效的网络抓取功能。
相较于传统爬虫技术,
基于 Scrapy 框架设计的系统在系统性、运行效率以及复杂任务处理能力方面均表现出色,
能够处理更为复杂的网络抓取需求。

Scrapy架构概览

Scrapy 框架的架构如图所示。

Scrapy architecture

图中绿色线条指示数据流动方向;所有数据流均通过中央Scrapy Engine进行管理;详细工作流程如下:

从初始 URL 启动时, Scheduler 负责将第一个待爬取的 URL 通过下载中间件传递给 Downloader 实施获取。
处理完毕后返回,Downloader 将响应通过相应的中间件传递给 Spider进行解析,此时爬虫的核心代码段得以执行。
Spider 分析完成后获得两类数据:一类是需进一步抓取的链接即新的 request,随后将该信息返回 Scheduler;另一类是经过处理后的 item,则会被 Item Pipeline 接收并完成存储和处理流程。
上述操作会反复执行直至 Scheduler 中不再有任何待处理的 request。

二、框架常用组件和工具

Scrapy 二进制命令行工具

安装完 Scrapy 后,便可以在命令行执行该命令。通过 scrapy -h 查看子命令,

复制代码
 Scrapy 2.3.0 - no active project

    
  
    
 Usage:
    
   scrapy <command> [options] [args]
    
  
    
 Available commands:
    
   bench         Run quick benchmark test
    
   commands
    
   fetch         Fetch a URL using the Scrapy downloader
    
   genspider     Generate new spider using pre-defined templates
    
   runspider     Run a self-contained spider (without creating a project)
    
   settings      Get settings values
    
   shell         Interactive scraping console
    
   startproject  Create new project
    
   version       Print Scrapy version
    
   view          Open URL in browser, as seen by Scrapy
    
  
    
   [ more ]      More commands available when run from project directory
    
  
    
 Use "scrapy <command> -h" to see more info about a command

其中startproject被用来生成一个Scrapy工程。 genspider则根据该模板生成一个新的爬虫脚本。 其余相关命令及其用法请参考其官方文档。

Scrapy shell 用于调试和验证根据 Xpath 或 Css 选择器获取到的内容

复制代码
 scrapy shell <url>

    
  
    
 可用快捷键有:
    
  
    
 shelp() - print a help with the list of available objects and shortcuts
    
  
    
 fetch(url[, redirect=True]) - fetch a new response from the given URL and update all related objects accordingly. You can optionaly ask for HTTP 3xx redirections to not be followed by passing redirect=False
    
  
    
 fetch(request) - fetch a new response from the given request and update all related objects accordingly.
    
  
    
 view(response) - open the given response in your local web browser, for inspection. This will add a <base> tag to the response body in order for external links (such as images and style sheets) to display properly. Note, however, that this will create a temporary file in your computer, which won’t be removed automatically.

可用的对象有:

crawlerspiderrequestresponsesettings

针对动态网页和内容的渲染工具 Splash

(https://docs.scrapy.org/en/latest/topics/dynamic-content.html)

Splash 项目地址: https://github.com/scrapinghub/splash

针对图像和文件数据的下载解决方案

参见:https://docs.scrapy.org/en/latest/topics/media-pipeline.html

三、Scrapy 框架提供的爬虫 Spider 类型

scrapy 框架提供了多种类型的 spider,大致分为两类

  • 一类为基本 spider(scrapy.Spider):需自行基于Xpath或CSS路径设计相应的解析逻辑。
  • 所有通用类爬虫均继承自Scrapy Spider基类,并规定其解析函数名不得选用parse(以避免与父类方法冲突)。
  • 建议采用规则集合进行模式匹配以实现数据采集。
  • 对于共用业务流程及相似逻辑函数建议创建一个基类BaseSpider并使其成为其他爬虫继承的对象。
  • 具体应用可参考https://docs.scrapy.org/en/latest/topics/spiders.html?highlight=CrawlSpider#crawlspider-example一文获取详细指导。

Scrapy 官方版本详细文档可参见:https://docs.scrapy.org/en/latest/

全部评论 (0)

还没有任何评论哟~