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)。
- Scrapy Engine
- 数据流
- 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 学习之路的主要内容,如果未能解决你的问题,请参考以下文章