scrapy的流程

其流程可以描述如下:

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

注意:

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

scrapy中每个模块的具体作用

1.scrapy项目实现流程

  • 创建一个scrapy项目:scrapy startproject 项目名

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

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

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

2. 创建scrapy项目

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

示例:scrapy startproject myspider

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

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

  • 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

scrapy介绍及使用的更多相关文章

  1. scrapy(1)——scrapy介绍

    Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中.所谓网络爬虫,就是一个在网上到处或定向抓取数据的程序,当然,这种说 ...

  2. scrapy介绍及源码分析

    一 简介 Scrapy基于事件驱动网络框架 Twisted 编写.因此,Scrapy基于并发性考虑由非阻塞(即异步)的实现. 官方文档 :https://docs.scrapy.org/en/late ...

  3. 小爬爬5:scrapy介绍2

    1.scrapy:爬虫框架 -框架:集成了很多功能且具有很强通用性的一个项目模板 -如何学习框架:(重点:知道有哪些模块,会用就行) -学习框架的功能模板的具体使用. 功能:(1)异步爬取(自带buf ...

  4. 小爬爬5:scrapy介绍3持久化存储

    一.两种持久化存储的方式 1.基于终端指令的吃持久化存储: 特点:终端指令的持久化存储,只可以将parse方法的返回值存储到磁盘文件 因此我们需要将上一篇文章中的author和content作为返回值 ...

  5. 爬虫之Scrapy框架介绍

    Scrapy介绍 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内 ...

  6. selenium模块使用详解、打码平台使用、xpath使用、使用selenium爬取京东商品信息、scrapy框架介绍与安装

    今日内容概要 selenium的使用 打码平台使用 xpath使用 爬取京东商品信息 scrapy 介绍和安装 内容详细 1.selenium模块的使用 # 之前咱们学requests,可以发送htt ...

  7. Scrapy

    Scrapy 从Python的Urllib.Urlllib2到scrapy,当然,scrapy的性能且效率是最高的,自己之前也看过一些资料,在此学习总结下. Scrapy介绍 关于scrapy scr ...

  8. Python之定向爬虫Scrapy

    1.Scrapy介绍 Scrapy,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试 ...

  9. 关于Scrapy框架的安装

    Scrapy介绍与环境安装 Scrapy介绍与环境安装 What is scrapy? An open source and collaborative framework for extractin ...

随机推荐

  1. 03 Node.js学习笔记之根据http请求路径返回不同数据

    在Nodejs中,当客户端请求的路径不同时,NodeJS处理返回不同的数据 步骤: //1.载入http模块 var http=require('http'); //2.创建一个http服务 var ...

  2. Java TCP协议字节处理工具类

    1.使用 tcp 协议 读取 输入流的固定长度的字节数 public static byte[] getTcpSpecificBytes(BufferedInputStream bis,int len ...

  3. Spring 事务笔记

    代码写着写着就钻进源码了. 概念 InfrastructureProxy 结构代理 百度查了查,这个类还没有解释. 进去看了一下: Interface to be implemented by tra ...

  4. Yii 数据库重连告别General error: 2006 MySQL server has gone away

    General error: 2006 MySQL server has gone away 错误原因 制造错误 解决办法 最新办法 错误原因 Mysql has gone away MySQL 服务 ...

  5. 编程语言分类 + python解释器的安装 + jupyter的使用(day 02整理)

    目录 一.昨日内容回顾 一 计算机基础之编程 (一) 什么是编程语言 (二) 什么是编程 (三) 为什么编程 二 计算机组成 (一) CPU (二) 存储器 (三) I/O设备 (四) 多核CPU ( ...

  6. Redis(八)理解内存

    Redis所有的数据都存在内存中,当前内存虽然越来越便宜,但跟廉价的硬盘相比成本还是比较昂贵,因此如何高效利用Redis内存变得非常重要. 高效利用Redis内存首先需要理解Redis内存消耗在哪里, ...

  7. OptimalSolution(6)--栈和队列

    一.设计一个有getMin功能的栈 题目:实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作.pop.push.getMin操作的时间复杂度都是O(1). 思路:设计两个栈,一 ...

  8. Spring中@Resource注解报错

    描述:Spring框架中,@Resource注解报错,在书写时没有自动提示 解决方法:因为maven配置文件的pom.xml文件中缺少javax.annotation的依赖,在pom.项目路中加入依赖 ...

  9. R语言之脸谱图

    脸谱图和星图类似,但它却比星图可以表示更多的数据维度.用脸谱来分析多维度数据,即将P个维度的数据用人脸部位的形状或大小来表征.脸谱图在平面上能够形象的表示多维度数据并给人以直观的印象,可帮助使用者形象 ...

  10. 自建windows服务器如何部署egg应用

    1. 使用IE浏览器登陆VPN 2. 远程登陆 3. 在服务器安装最新的node.js,git等 4. 下载源码 > git clone ****.git 5. npm安装依赖 > cd ...