scrapy 学习之路

scrapy 学习之路

1 scrapy 架构分析

1.1 scrapy数据流

scrapy_architecture.png

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)


  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值