Scrapy框架
Scrapy使用了Twisted作为框架,Twisted有些特殊的地方是它是事件驱动的, 并且比较适合异步的代码, 对于会阻塞线程的操作包含访问文件, 数据库或者Web, 产生新的进程并需要处理新进程的输出(如运行shell命令), 执行系统层次操作的代码(冗余等待系统队列), Twisted提供了允许执行上面的操作但不会阻塞代码执行的方法.
Scrapy流程图 :
Scrapy数据流是由执行的核心引擎(engine)控制, 流程如下 :
1. 爬虫引擎engine获得初始请求开始抓取.
2. 爬虫引擎engine开始请求调度程序scheduler, 并准备对下一次的请求进行抓取.
3. 爬虫调度器返回下一个请求给爬虫引擎.
4. 引擎请求发送端奥下载器downliader, 并准备对下一次的请求进行抓取.
5. 一旦下载器完成页面下载, 将下载结果返回给爬虫引擎engine.
6. 爬虫引擎engine将下载器downloader的响应通过中间件middlewares返回给爬虫spiders进行处理.
7. 爬虫spiders处理响应, 并通过中间件middlewares返回处理后的items, 以及新的请求给引擎.
8. 引擎发送处理后的items到项目管道, 然后把处理结果返回给调度器scheduler, 调度器计划处理下一个请求抓取.
9. 重复该过程(继续步骤1), 知道将所有url爬取完毕.
组件功能 :
爬虫引擎(engine)
爬虫引擎负责控制各个组件之间的数据流, 当某些操作触发事件后都是通过engine来处理.
调度器(scheduler)
调度器收来engine的请求并将请求放入队列中, 并通过事件返回给engine.
下载器(downloader)
通过engine请求下载网络数据并将结果响应给engine.
Spider
Spider发出请求, 并处理engine返回给它下载器响应回来的数据, 以items和规则内的数据请求(urls)返回给engine
管道项目(items pipeline)
负责处理engine返回spider解析后的数据, 并且将数据持久化吗例如将数据存入数据库后者文件.
下载中间件
下载中间件是engine和下载器交互组件, 以钩子(插件)的形式存在, 可以带替接收请求, 处理数据的下载以及将结果响应给engine
spider中间件
spider中间件是engine和spider之间的交互组件, 以钩子的形式存在, 可以代替处理response以及返回给engine items及新的请求集.
Scrapy框架的基本命令
创建Scrapy项目
创建scrapy项目的命令是scrapy startproject ''项目名'', 创建一个爬虫项目,
进入到项目目录scrapy genspider ''爬虫名字'' ''爬虫的域名''
xxxdeMBP:python_project xxx$ scrapy startproject test1 New Scrapy project 'test1', using template directory '/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/scrapy/templates/project', created in: /Users/xxx/Documents/python_project/test1 You can start your first spider with: cd test1 scrapy genspider example example.com xxxdeMBP:python_project zhaofan$ xxxdeMBP:test1 xxx$ scrapy genspider shSpider hshfy.sh.cn Created spider 'shSpider' using template 'basic' in module: test1.spiders.shSpider
scrapy项目结构 :
items.py 负责数据模型的建立, 类似于实体类
middleares.py 自己定义的中间件
pipelines.py 负责对spider返回数据的处理
settings.py 负责对整个爬虫的配置
spiders目录 负责存放继承自scrapy的爬虫类
scrapy.cfg scrapy基础配置
关于命令的详细使用 :
命令的使用范围 :
使用命令分为全局命令和项目命令, 全局的命令表示可以在任何地方使用, 而项目的命令只能在项目目录下使用
全局命令 :
startproject : 创建爬虫项目
genspider : 用于生成爬虫
settings : 获取当前的配置信息(scrapy settings -h获取此命令的所有帮助信息)
runspider : 启动爬虫程序(和crawl启动不同, 通过scrapy runspider 爬虫文件名 启动)
shell : 是一个命令行交互模式(scrapy shell url地址进入交互模式)
fetch : 该命令会通过scrapy downloader将网页源码下载下来显示(scrapy fetch url地址)
view : 该命令会将网页document内容下载下来, 并且在浏览器显示(scrapy view url地址)
version : 查看版本信息, 并查看依赖库的信息
项目命令 :
crawl : 启动爬虫程序(scrapy crawl 爬虫名字)
check : 用于检查代码是否有错误(scrapy check)
list : scrapy list列出可用的爬虫
edit
parse
bench