Scrapy爬虫框架的基本流程 数据流的传递过程 五大核心组件的基本功能说明

通过前面几篇文章的学习,相信你可以简单的使用Scrapy框架了,那么你可能会对内部的原理、实现方式、各部分组件的功能有些模糊,这篇文章就来带大家详细认识一下!

Scrapy爬虫框架的原理图

Scrapy爬虫框架的基本流程 数据流的传递过程 五大核心组件的基本功能说明_第1张图片

Scrapy爬虫分为以下几个部分来协同工作:

  • 引擎(Scrapy Engine):用来处理整个系统的数据流, 触发事务,是整个框架的核心。通过他的处理,来实现整个框架的正常工作。

  • 调度器(Scheduler):用来接受引擎发过来的请求, 传入队列中, 并在引擎再次请求的时候返回.
    可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列, 由它来决定下一个要抓取的网址是什么,
    同时比较强大的功能就是:可以对以前已经抓取过得链接进去重。

  • 下载器(Downloader):用于下载网页内容,
    并将网页内容返回给Spider(Scrapy下载器是建立在twisted这个高效的异步模型上的),其实是将抓取的内容返回给引擎,引擎然后将网站的内容返回给spider。spider将内容进行解析。提取有用的数据或者进行下一步的抓取,或者将数据结构化给pipeline。

  • 爬虫(Spiders):爬虫是主要干活的, 用于从特定的网页中提取自己需要的信息,
    即所谓的实体(Item)。用户也可以从中提取出链接(new_url),让Scrapy继续抓取下一个页面。

  • 项目管道(Pipeline):负责处理爬虫从网页中提取的实体内容,主要的功能是持久化实体,验证实体的有效性、清除不需要的信息。

从我们爬虫文件中的start_urls 开始,到引擎,引擎交给调度器Scheduler, 调度器会将其交给下载器 Downloader 进行下载,下载之后会交给 Spider 进行分析,Spider 分析出来的结果有两种:一种是需要进一步抓取的链接,例如之前分析的“下一页”的链接,这些东西会被传回 Scheduler ;另一种是需要保存的数据,它们则被送到 Item Pipeline 那里,那是对数据进行后期处理(详细分析、过滤、存储等)的地方。另外,在数据流动的通道里还可以安装各种中间件,进行必要的处理。

Scrapy爬虫框架的配置文件说明

为什么需要配置文件?
配置文件存放一些公共的变量(比如数据库的地址,账号密码等)。方便自己和别人修改,一般用全大写字母命名变量名。MONGODB_TABLE
settings文件中的配置信息包含:

...
...
# Crawl responsibly by identifying yourself (and your website) on the user-agent
#通过在用户代理上标识您自己(和您的网站)负责任地爬行
##默认的user-agent是关闭的,是个scrapy爬虫,你也可以开启试试,或者在这里替换user-agent也可以
#USER_AGENT = 'myspider (+http://www.yourdomain.com)'

# Obey robots.txt rules
#遵守robots.txt规则 默认遵守,基本都会修改为False
ROBOTSTXT_OBEY = True

# Configure maximum concurrent requests performed by Scrapy (default: 16)
#配置Scrapy执行的最大并发请求数(默认值:16),打开注释为32个
#CONCURRENT_REQUESTS = 32

# Configure a delay for requests for the same website (default: 0)
#为同一网站的请求配置延迟(默认值:0)理解为对于一个相同的url是否需要建立连接
# See https://doc.scrapy.org/en/latest/topics/settings.html#download-delay
# See also autothrottle settings and docs
#DOWNLOAD_DELAY = 3

# The download delay setting will honor only one of:
#下载延迟设置将仅支持以下选项之一
#CONCURRENT_REQUESTS_PER_DOMAIN = 16
#CONCURRENT_REQUESTS_PER_IP = 16

# Disable cookies (enabled by default)
#禁用Cookie(默认情况下已启用)
#COOKIES_ENABLED = False

# Disable Telnet Console (enabled by default)
#禁用Telnet控制台(默认启用)
#TELNETCONSOLE_ENABLED = False

# Override the default request headers:
#重写默认请求头
#DEFAULT_REQUEST_HEADERS = {
#   'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
#   'Accept-Language': 'en',
#}

# Enable or disable spider middlewares
#启用或禁用爬虫中间件
# See https://doc.scrapy.org/en/latest/topics/spider-middleware.html
#SPIDER_MIDDLEWARES = {
#    'myspider.middlewares.MyspiderSpiderMiddleware': 543,
#}

# Enable or disable downloader middlewares
#启用或禁用下载程序中间件
# See https://doc.scrapy.org/en/latest/topics/downloader-middleware.html
#DOWNLOADER_MIDDLEWARES = {
#    'myspider.middlewares.MyspiderDownloaderMiddleware': 543,
#}

# Enable or disable extensions
#启用或禁用扩展插件
# See https://doc.scrapy.org/en/latest/topics/extensions.html
#EXTENSIONS = {
#    'scrapy.extensions.telnet.TelnetConsole': None,
#}

# Configure item pipelines
#配置项管道
# See https://doc.scrapy.org/en/latest/topics/item-pipeline.html
#ITEM_PIPELINES = {
#    'myspider.pipelines.MyspiderPipeline': 300,
#}

# Enable and configure the AutoThrottle extension (disabled by default)
# 启用并配置AutoThrottle扩展(默认情况下禁用)
# See https://doc.scrapy.org/en/latest/topics/autothrottle.html
#AUTOTHROTTLE_ENABLED = True
# The initial download delay
#初始下载延迟
#AUTOTHROTTLE_START_DELAY = 5
# The maximum download delay to be set in case of high latencies
#在高延迟情况下设置的最大下载延迟
#AUTOTHROTTLE_MAX_DELAY = 60
# The average number of requests Scrapy should be sending in parallel to
# each remote server
# Scrapy应并行发送到每个远程服务器的平均请求数
#AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0

# Enable showing throttling stats for every response received:
#启用显示接收到的每个响应的限制状态,是否可以向远程服务器发送请求
#AUTOTHROTTLE_DEBUG = False

# Enable and configure HTTP caching (disabled by default)
# 启用和配置HTTP缓存(默认情况下禁用)
# See https://doc.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings
#缓存的过期时间,缓存的文件夹路径,忽略那些http响应码
#HTTPCACHE_ENABLED = True
#HTTPCACHE_EXPIRATION_SECS = 0
#HTTPCACHE_DIR = 'httpcache'
#HTTPCACHE_IGNORE_HTTP_CODES = []
#HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'

你可能感兴趣的:(scrapy)