scrapy介绍及使用

scrapy的流程

 

其流程能够描述以下:python

  1. 调度器把requests-->引擎-->下载中间件--->下载器
  2. 下载器发送请求,获取响应---->下载中间件---->引擎--->爬虫中间件--->爬虫
  3. 爬虫提取url地址,组装成request对象---->爬虫中间件--->引擎--->调度器
  4. 爬虫提取数据--->引擎--->管道
  5. 管道进行数据的处理和保存

注意:cookie

  • 图中绿色线条的表示数据的传递
  • 注意图中中间件的位置,决定了其做用
  • 注意其中引擎的位置,全部的模块以前相互独立,只和引擎进行交互

scrapy中每一个模块的具体做用

 

 

 1.scrapy项目实现流程

  • 建立一个scrapy项目:scrapy startproject 项目名并发

  • 生成一个爬虫:scrapy genspider 爬虫名 容许爬取的范围dom

  • 提取数据:完善spider,使用xpath等方法scrapy

  • 保存数据:pipeline中保存数据ide

2. 建立scrapy项目

命令:scrapy startproject +<项目名字>函数

示例:scrapy startproject myspiderurl

生成的目录和文件结果以下:spa

 

 

settings.py中的重点字段和内涵3d

  • USER_AGENT 设置ua
  • ROBOTSTXT_OBEY 是否遵照robots协议,默认是遵照
  • CONCURRENT_REQUESTS 设置并发请求的数量,默认是16个
  • DOWNLOAD_DELAY 下载延迟,默认无延迟
  • COOKIES_ENABLED 是否开启cookie,即每次请求带上前一次的cookie,默认是开启的
  • DEFAULT_REQUEST_HEADERS 设置默认请求头
  • SPIDER_MIDDLEWARES 爬虫中间件,设置过程和管道相同
  • DOWNLOADER_MIDDLEWARES 下载中间件

建立爬虫

命令:scrapy genspider +<爬虫名字> + <容许爬取的域名>

生成的目录和文件结果以下:

完善spider

完善spider即经过方法进行数据的提取等操作:

注意:

  1. response.xpath方法的返回结果是一个相似list的类型,其中包含的是selector对象,操做和列表同样,可是有一些额外的方法
  2. extract() 返回一个包含有字符串的列表
  3. extract_first() 返回列表中的第一个字符串,列表为空没有返回None
  4. spider中的parse方法必须有
  5. 须要抓取的url地址必须属于allowed_domains,可是start_urls中的url地址没有这个限制
  6. 启动爬虫的时候注意启动的位置,是在项目路径下启动

 

数据传递到pipeline

为何要使用yield?

  • 让整个函数变成一个生成器,有什么好处呢?
  • 遍历这个函数的返回值的时候,挨个把数据读到内存,不会形成内存的瞬间占用太高
  • python3中的range和python2中的xrange同理

注意:

  • yield可以传递的对象只能是:BaseItem,Request,dict,None

6. 完善pipeline

 

 

 

 

pipeline在settings中可以开启多个,为何须要开启多个?

  • 不一样的pipeline能够处理不一样爬虫的数据
  • 不一样的pipeline可以进行不一样的数据处理的操做,好比一个进行数据清洗,一个进行数据的保存

pipeline使用注意点

  • 使用以前须要在settings中开启
  • pipeline在setting中键表示位置(即pipeline在项目中的位置能够自定义),值表示距离引擎的远近,越近数据会越先通过
  • 有多个pipeline的时候,process_item的方法必须return item,不然后一个pipeline取到的数据为None值
  • pipeline中process_item的方法必须有,不然item没有办法接受和处理
  • process_item方法接受item和spider,其中spider表示当前传递item过来的spider
相关文章
相关标签/搜索