爬虫学习(十九)——Scrapy的学习及其使用
Scrapy框架的介绍
Scrapy,非常的强悍,通过python语言编写的,非常知名的爬虫框架
框架工作流程
框架流程图

基本工作流程;
1、引擎向spiders要url
2、引擎将要爬取的url给调度器(schedule)
3、调度器(schedule)会将url生成请求对象放入到指定的队列中
4、从队列中抛出一个请求
5、引擎将请求交给下载器进行处理
6、下载器发送请求,获取互联网数据
7、下载器将数据返回给引擎进行处理
8、引擎将数据再次给spiders
9、spiders使用xpath解析该数据,得到数据或url
10、spiders将数据或者url给到引擎
11、引擎判断spiders发送的是url函数数据,将数据交给管道 Item Pipeline,是url交给调度器处理
注意:
scrapy结束工作流程的条件是spiders传给引擎的只剩下数据的时候是流程工作结束的时候
Scrapy框架各部分职能
scrapy engine:负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等
Schedule(调度器):它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎
downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理
Spiders(爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器)
Item pipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方
Scrapy框架的使用
基本使用:
1、关于scrapy框架,我们只需要关注spiders即可,爬虫的代码也是写到了spiders里面
2、管道是用来处理数据的,框架为我们留下接口,只需要实现接口即可
创建工程项目
1、通过指令创建项目:scrapy startproject xxx
2、通过指令创建文件
①cd 目标文件
②scrapy genspider name www.xxx.com
参数解释:
name:爬虫的名字,启动时根据爬虫的名字启动项目
allowed_domains:允许的域名,就是爬取的时候这个请求要不要发送,如果是允许该域名之下的url,就会发送,如果不是,则过滤掉这个请求,这是一个列表,可以写多个允许的域名
start_urls:爬虫的起始url,是一个列表,可以传递多个起始的url
def parse(self,response) :parse函数名是固定的,当收到下载数据的时候,就会自动调用这个方法;response是该函数的第二个参数,是一个响应对象,从该对象中回去HTML字符串,然后解析
注意:parse函数返回的必须是一个可迭代的对象
定制item.py
打印response对象
命令:scrapy crawl name
运行
命令:scrapy crawl name -o filename
爬虫学习(十九)——Scrapy的学习及其使用的更多相关文章
- 大白话5分钟带你走进人工智能-第二十九节集成学习之随机森林随机方式 ,out of bag data及代码(2)
大白话5分钟带你走进人工智能-第二十九节集成学习之随机森林随机方式 ,out of bag data及代码(2) 上一节中我们讲解了随机森林的基本概念,本节的话我们讲解随机森 ...
- Python之爬虫(十九) Scrapy框架中Download Middleware用法
这篇文章中写了常用的下载中间件的用法和例子.Downloader Middleware处理的过程主要在调度器发送requests请求的时候以及网页将response结果返回给spiders的时候,所以 ...
- 强化学习(十九) AlphaGo Zero强化学习原理
在强化学习(十八) 基于模拟的搜索与蒙特卡罗树搜索(MCTS)中,我们讨论了MCTS的原理和在棋类中的基本应用.这里我们在前一节MCTS的基础上,讨论下DeepMind的AlphaGo Zero强化学 ...
- WebGPU学习(九):学习“fractalCube”示例
大家好,本文学习Chrome->webgpu-samplers->fractalCube示例. 上一篇博文: WebGPU学习(八):学习"texturedCube"示 ...
- 学习之路三十九:新手学习 - Windows API
来到了新公司,一开始就要做个程序去获取另外一个程序里的数据,哇,挑战性很大. 经过两周的学习,终于搞定,主要还是对Windows API有了更多的了解. 文中所有的消息常量,API,结构体都整理出来了 ...
- Spring学习(十九)----- Spring的五种事务配置详解
前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学习发觉Spring的事务配置只要把思路理清,还是比较好掌握的. ...
- python学习(十九)常见的第三方库
原文链接:http://www.limerence2017.com/2017/12/28/python19/#more 介绍几个python中常见的第三方库. Pillow Pillow简称PIL,是 ...
- Scala学习十九——解析
一.本章要点 文法定义中的二选一.拼接.选项和重复在Scala组合子解析器中对应|.~.opt和rep 对于RegexParsers而言,字符串字面量和正则表达式匹配的是词法单元 用^^来处理解析结果 ...
- python 学习笔记十九 django深入学习四 cookie,session
缓存 一个动态网站的基本权衡点就是,它是动态的. 每次用户请求一个页面,Web服务器将进行所有涵盖数据库查询到模版渲染到业务逻辑的请求,用来创建浏览者需要的页面.当程序访问量大时,耗时必然会更加明显, ...
- Android学习十九:ContentProvider初步
一.Content Provider基本概念 1.ContentProvider为存储和获取数据提供了统一的接口.ContentProvide对数据进行封装.不用关心数据存储的细节.使用表的形式来组织 ...
随机推荐
- nodejs --- crypto实现加密(转)
crypto实现加密 本文转自:http://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/0 ...
- nexus 私服相关的配置
1 上传到nexus的配置 1 settings.xml <server> <id>releases</id> <username>admin</ ...
- 实现Web层的日志切面(方便清晰查看日志)
import org.aspectj.lang.JoinPoint; import org.aspectj.lang.Signature; import org.aspectj.lang.anno ...
- SQL语句增删改字段、表、修改默认值
收集转载: 1.修改字段,默认值 .修改字段默认值 alter table 表名 drop constraint 约束名字 ------说明:删除表的字段的原有约束 alter table 表名 ad ...
- jquery拖拽排序,针对后台列表table进行拖拽排序(超实用!)
现在很多后台列表为了方便均使用拖拽排序的功能,对列表进行随意的排序. 话不多说 ,我在网上找了一些demo,经过对比,现在把方便实用的一个demo列出来,基于jqueryUI.js 先上html代码, ...
- Linux如何上查看和退出tomcat实时日志
1.先切换到:cd usr/local/tomcat/logs 目录下 2.tail -f catalina.out Ctrl+c 是退出tail命令. alt+E+R重置.
- Python常用模块(三)
一.shelve模块 shelve也是一种序列化方式,在python中shelve模块提供了基本的存储操作,shelve中的open函数在调用的事和返回一个shelf对象,通过该对象可以存储内容,即像 ...
- CSS中的鼠标样式明细
<INPUT TYPE="submit" style="cursor: hand" value="hand"> ...
- android里的继承浅析
先看一段代码: abstract class A{ public A(){ this.print(); } public abstract void print(); } class B extend ...
- Spring实践系列-入门篇(一)
本文主要介绍了在本地搭建并运行一个Spring应用,演示了Spring依赖注入的特性 1 环境搭建 1.1 Maven依赖 目前只用到依赖注入的功能,故以下三个包已满足使用. <properti ...