Scrapy简介

目录

  • Scrapy介绍
  • Scrapy工作流程
  • Scrapy入门
  • pipline使用


Scrapy介绍

  • 什么是Scrapy
    Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,我们只需要实现少量的代码,就能够快速的抓取
    Scrapy使用了Twisted异步网络框架,可以加快我们的下载速度
    官方文档:http://scrapy-chs.readthedocs.io/zh_CN/1.0/intro/overview.html
    Scrapy的好处:可配置和扩展性高,框架是Twisted异步网络框架
  • 异步和非阻塞的区别
    异步:调用在发出之后,这个调用就直接返回,不管有无结果
    非阻塞:关注的是程序在等待调用结果时的状态,指在不能立刻得到结果之前,该调用不会阻塞当前线程
    Scrapy简介_第1张图片

Scrapy工作流程

Scrapy简介_第2张图片
另一种爬虫方式
Scrapy简介_第3张图片
Scrapy工作流程:
引擎是整个框架的核心
调度器接收从引擎发过来的url,并入列
下载器 :下载网页源码,返回给爬虫程序
项目管道负责数据处理
下载中间件处理引擎与下载器之间的请求
爬虫中间件处理爬虫程序响应和输出结果以及新的请求
下载中间件和爬虫中间件是负责引擎和下载器还有引擎和爬虫程序之间的数据传输
Scrapy简介_第4张图片

Scrapy engine(引擎) 总指挥:负责数据和信号的在不同模块间的传递 scrapy已经实现
Scheduler(调度器) 一个队列,存放引擎发过来的request请求 scrapy已经实现
Downloader(下载器) 下载把引擎发过来的requests请求,并返回给引擎 scrapy已经实现
Spider(爬虫) 处理引擎发来的response,提取数据,提取url,并交给引擎 需要手写
Item Pipline(管道) 处理引擎传过来的数据,比如存储 需要手写
Downloader Middlewares(下载中间件) 可以自定义的下载扩展,比如设置代理 一般不用手写
Spider Middlewares(中间件) 可以自定义requests请求和进行response过滤 一般不用手写

Scrapy入门

1 创建一个scrapy项目

scrapy startproject mySpider

2 生成一个爬虫

scrapy genspider demo "demo.cn"

3 提取数据:完善spider 使用xpath

4 保存数据:pipeline中保存数据
在命令行中运行爬虫

scrapy crawl qb     # qb爬虫的名字

在代码中运行爬虫

scrapy genspider example example.com

example :爬虫程序的名字
example.com :爬取的网站的域名

from scrapy import cmdline
cmdline.execute("scrapy crawl qb".split())
  • settings文件
是否遵守robots协议 一般给为False
ROBOTSTXT_OBEY = False
最大并发量 默认是16
Configure maximum concurrent requests performed by Scrapy (default: 16)
CONCURRENT_REQUESTS = 32
下载延迟为3秒
DOWNLOAD_DELAY = 3
请求报头
DEFAULT_REQUEST_HEADERS = {
     
'User-Agent':'Mozilla/5.0',
'Accept':
'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'en',
}
爬虫中间件
SPIDER_MIDDLEWARES = {
     
'mySpider.middlewares.MyspiderSpiderMiddleware': 543,
}
下载中间件
DOWNLOADER_MIDDLEWARES = {
     
'mySpider.middlewares.MyspiderDownloaderMiddleware': 543,
}
管道
ITEM_PIPELINES = {
     
'mySpider.pipelines.MyspiderPipeline': 300,
}

pipline使用

从pipeline的字典形可以看出来,pipeline可以有多个,而且确实pipeline能够定义多个
为什么需要多个pipeline:
1 可能会有多个spider,不同的pipeline处理不同的item的内容
2 一个spider的内容可以要做不同的操作,比如存入不同的数据库中
注意:
1 pipeline的权重越小优先级越高
2 pipeline中process_item方法名不能修改为其他的名称

在爬虫文件中要使用yield关键字把数据给管道
在settings文件里面一定要开启管道
open_spider() 爬虫开始
close_spider() 爬虫结束

你可能感兴趣的:(Scrapy简介)