scrapy 学习之路

Posted 灬鬼谷灬

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了scrapy 学习之路相关的知识,希望对你有一定的参考价值。

scrapy 学习之路

Table of Contents

1 scrapy 架构分析

1.1 scrapy数据流

Figure 1: scrapy Architecture

  • 组件分析
    • Scrapy Engine
      • 引擎负责控制数据流在系统中所有组件中流动,并在相应动作发生时触发事件。
    • Scheduler
      • 调度器从引擎获得request请求并将他们放入队列,之后引擎有请求时,再反馈给引擎。
    • Downloader
      • 下载器负责获取页面数据并反馈给引擎,然后传递给spider。
    • Spiders
      • Spider是Scrapy用户编写的类,此类用于分析response并提取item(即获取到的item)或继续跟进URL。 每个spider负责处理一个特定(或一些)网站。
    • Item Pipeline
      • Item Pipeline负责处理被spider提取出来的item。典型的处理有清理、 验证及持久化(例如存取到数据库中)。
    • Downloader middlewares
      • 下载器中间件是在引擎及下载器之间的特定钩子(specific hook),可以处理Engine和Downloader之间的request和response。
    • Spider middlewares
      • Spider中间件是在引擎及Spider之间的特定钩子(specific hook),处理spider的输入(response)和输出(items及requests)。
  • 数据流


  • twisted 事件驱动网络框架
    • 非阻塞的异步框架

2 scrapy 源码分析,按执行流程分析

2.1 下载git源码

2.2 软件包安装setup.py,参考python包管理工具[setuptools]

from setuptools import setup, find_packages                                                                                                         
setup(
    name = 'demo',
    version = '0.1',
    packages = find_packages('src'),
    package_dir = '':'src',
    entry_points = 
	'console_script':[
	    'show = demo:test',
	]
    
)

2.2.1 scrapy入口

entry_points=
	'console_scripts': ['scrapy = scrapy.cmdline:execute']
    

2.2.2 /usr/bin/scrapy 可以看出,execute是无参数启动

#!/usr/bin/python

# -*- coding: utf-8 -*-
import re
import sys

from scrapy.cmdline import execute

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\\.pyw|\\.exe)?$', '', sys.argv[0])
    sys.exit(execute())

2.3 cmdline.py 分析

2.3.1 None是一种类型,type(None) ==> <type 'NoneType'>

2.3.2 代码分析

def execute(argv=None, settings=None):
    # 1、参数检查
    # 2、 backwards compatibility for scrapy.conf.settings singleton ---

    # 3、解析命令行    
    cmd = cmds[cmdname] #cmdname == 'crawler'
    opts, args = parser.parse_args(args=argv[1:])
    _run_print_help(parser, cmd.process_options, args, opts)
    # 4、执行爬虫程序
    cmd.crawler_process = CrawlerProcess(settings)
    _run_print_help(parser, _run_command, cmd, args, opts)


以上是关于scrapy 学习之路的主要内容,如果未能解决你的问题,请参考以下文章

scrapy的学习之路1(简单的例子)

python之路 -- 爬虫 -- Scrapy入门

Python学习之路

小白的scrapy入门之路

数据之路 - Python爬虫 - Scrapy框架

使用scrapy第一次成功爬出信息,目标是流放之路论坛