爬虫(Scrapy架构)

1. 什么是Scrapy架构

scrapy 是一个为了爬取网站数据,提取结构性数据而编写的应用框架,我们只需要实现少量代码,就能够快
速的抓取到数据内容。Scrapy 使用了 Twisted['twɪstɪd]异步网络框架来处理网络通讯,可以加
快我们的下载速度,不用自己去实现异步框架,并且包含了各种中间件接口,可以灵活的完成各种需求。

2. Scrapy架构组件

	引擎(Scrapy):用来处理整个系统的数据流,触发事务(框架核心)
	调度器(Scheduler):用来接受引擎发过来的请求,压入队列中,并在引擎再次请求时返回。可以
想象成一个URL(抓取网页的网址或者说是链接)的优先队列,由它来决定下一个要抓取的网址是什
么,同时去除重复的网址
	下载器(Downloader):用于下载网页内容,并将网页内容返回给爬虫(Scrapy下载器是建立在
twisted这个高效的异步模型上的)
	爬虫(Spiders):爬虫是主要干活的,用于从特定的网页中提取自己需要的信息,即所谓的实体
(item)。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面
	项目管道(Pipeline):负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体、验证实体的
有效性、清理不需要的信息。当页面被爬虫解析后,将被发送到项目管道,并经过几个特定的次序处
理数据。

3. Scrapy架构流程

Scrapy架构流程

4. 使用Scrapy架构爬取网页信息

4.1 安装scrapy:
	pip install scrapy
4.2 新建scrapy项目:
	scrapy startproject 项目名称
4.3 进入项目目录
4.4 新建爬虫:
	scrapy  genspider 爬虫名称 "要爬取的域名"
4.5 items.py中设置所要爬取的信息:
	Item对象是一个简单容器, 保存爬取到的数据, 类似于字典的操作;
	爬取信息名称=scrapy.Field()
4.6 pipelines.py中存储爬取的信息:
	    """将爬取的信息保存为Json格式"""
	    def __init__(self):
	        self.f = open(MOOCFilename, 'w')
	
	    def process_item(self, item, spider):
	        # 默认传过来的item是json格式
	        import json
	        # 读取item中的数据, 并转成json格式;
	        line = json.dumps(dict(item), ensure_ascii=False, indent=4)
	        self.f.write(line + '\n')
	        # 一定要加, 返回给调度为器;
	        return item
	    def open_spider(self, spider):
	        """开启爬虫时执行的函数"""
	        pass
	
	    def close_spider(self, spider):
	        """当爬虫全部爬取结束的时候执行的函数"""
	        self.f.close()
4.7 在爬虫文件中写入爬虫:
	1). 实例化对象, CourseItem
		course = CourseItem()
    2). 分析响应的内容
4.8 取消管道设置注释:
	ITEM_PIPELINES = {
	    # 管道的位置: 优先级, 0~1000, 数字越小, 优先级越高;
	   'mySpider.pipelines.MyspiderPipeline': 300,
	}
4.8 运行爬虫:
	scrapy crawl 爬虫名称

猜你喜欢

转载自blog.csdn.net/qq_43281189/article/details/87810024