scrapy 开发流程
一、Spider 开发流程
实现一个 Spider 子的过程就像是完成一系列的填空题,Scrapy 框架提出以下问题让用户在Spider 子类中作答:
1、爬虫从哪个或者那些页面开始爬取?
2、对于一个已下载的页面,提取其中的那些数据?
3、爬取完当前页面后,接下来爬取哪个或那些页面?
上面问题的答案包含了一个爬虫最重要的逻辑,回答了这些问题,一个爬虫也就开发出来了。
实现一个Spider 只需要完成下面4个步骤:
步骤 01: 继承 scrapy.Spider
import scrapy class BooksSpider(scrapy.Spider):
...
步骤 02:为 Spider 取名;
import scrapy class BooksSpider(scrapy.Spider):
name = "book"
...
步骤 03:设定起始爬取点;
class BooksSpider(scrapy.Spider):
...
start_url = ['http://books.toscrape.com/']
...
start_url 同常被实现成一个列表,其中放入所有的其实爬去点的 url (例子中只有一个其实点)。看到这里,大家可能会想,请求页面下载不是一定要提交 Request 对象么? 而我们仅定义了 url 列表,是谁暗中构造并提交了 Request 对象呢? 通过阅读 Spider 基类源码可以找到答案,相关代码如下:

步骤 04:实现页面解析函数;
页面解析函数也就是构造 Request 对象是通过 callback 参数指定的回调函数(或默认的 parse 方法)。页面解析函数是实现 Spider 中最核心的部分,它需要完成以下两项工作:
1、使用选择器提取页面中的数据,将数据封装后 (Item 或字典)提交给 Scrapy 引擎。
2、使用选择器或 LinkExtractor 提取页面中的连接,用其构造新的Request 对象并提交给 Scrapy 引擎(下载连接页面)。
一个页面中可能包含多项数据以及多个连接,因此页面解析函数被要求返回一个可迭代对象(通常被实现成一个生成器函数),每次迭代返回一项数据(Item或字典)或一个 Request 对象。
scrapy 开发流程的更多相关文章
- Linux下服务器端开发流程及相关工具介绍(C++)
去年刚毕业来公司后,做为新人,发现很多东西都没有文档,各种工具和地址都是口口相传的,而且很多时候都是不知道有哪些工具可以使用,所以当时就想把自己接触到的这些东西记录下来,为后来者提供参考,相当于一个路 ...
- 小谈Scrum敏捷开发流程
一晃眼,有两年没有写博客了,回顾前两年,各种奔波,各种忙碌,也有不少的收获.从今天开始,我要把这些收获都分享在这里. 其实这两年,对我影响最大的是开发流程.总所周知,一个好的开发流程,对于项目的进行, ...
- 我理解的Sitecore开发流程
Sitecore是一个强大的支持快速开发CMS建站的平台,进入sitecore后台可以看到 它主要有3个元素: 1.Templates模板 Data template:类似于面向对象编程中的类或结构体 ...
- C++的性能C#的产能?! - .Net Native 系列《二》:.NET Native开发流程详解
之前一文<c++的性能, c#的产能?!鱼和熊掌可以兼得,.NET NATIVE初窥> 获得很多朋友支持和鼓励,也更让我坚定做这项技术的推广者,希望能让更多的朋友了解这项技术,于是先从官方 ...
- git开发流程、常用命令及工具、TortoiseGit使用及常见问题
根据我最近使用git的一些经历,git是基于分支的版本控制工具,分支有远程分支和本地分支. 一.开发流程 - 从远程服务器的master,clone一份项目文件到本地,然后本地master的基础上br ...
- 软件开发流程 Software development process
软件开发流程(Software development process)即软件设计思路和方法的一般过程,包括设计软件的功能和实现的算法和方法.软件的总体结构设计和模块设计.编程和调试.程序联调和测试以 ...
- Web开发流程
知乎上关于Web开发流程豪情给予的回答 web前端开发流程是什么?进行操作会用到哪些便捷的小工具?是先用模板做好,然后在基础上改吗??正常大家说的改框架是不是指的用模板做的网站原文件?前端开发做的文件 ...
- 基于Lattice_CPLD/FPGA Diamond 开发流程
本文主要介绍了Lattice CPLD/FPGA集成开发环境的使用方法,并通过点亮开发板(Mach XO2 Breakout Board)上位号为D2的LED这一实例来演示其开发流程. 1. ...
- iOS开发流程总结
本文由社区会员umyueyue分享 以下是会员umyueue总结的iOS开发流程以及学习中的资料分享. 流程:注册.开发.真机测试.发布以及上线. iPhone iOS 4从注册到app上线开发流程 ...
随机推荐
- 【PAT甲级】1084 Broken Keyboard (20 分)
题意: 输入两行字符串,输出第一行有而第二行没有的字符(对大小写不敏感且全部以大写输出). AAAAAccepted code: #define HAVE_STRUCT_TIMESPEC #inclu ...
- 【工具类】Java中判断字符串是否为数字的五种方法
1 //方法一:用JAVA自带的函数 2 public static boolean isNumeric(String str){ 3 for (int i = str.length();--i> ...
- python 切片技巧
说明: 字符串[开始索引:结束索引:步长] 开始索引:从指定位置开始截取: 结束索引:从指定位置结束截取,但不包含该位置的字符. 步长:不指定时步长为1: 1)当步长为正数时候,那么切片是从左到右进行 ...
- Spring Boot Shiro 使用教程
Apache Shiro 已经大名鼎鼎,搞 Java 的没有不知道的,这类似于 .Net 中的身份验证 form 认证.跟 .net core 中的认证授权策略基本是一样的.当然都不知道也没有关系,因 ...
- 关闭AnyConnect登录安全警告窗口
一.问题描述:使用AnyConnect client连接时,如何关闭的安全警告窗口? 二.原因分析: AnyConnect Server(ASA)和AnyConect client(PC)上没有受 ...
- Redis为什么要自己实现一个SDS
Redis是使用C语言开发的,在C语言中没有字符串这种数据类型,字符串大都是通过字符数组实现的,但是使用字符数组有以下不足: 1. 字符数组的长度都是固定,容易发生空指针2. 获取字符数组的长度的时候 ...
- c++ 查重+排序函数
输入 第一行n.第二行有n个元素. 输出 查重排序后的元素 样例: 输入: 5 1 1 2 3 4 输出: 1 2 3 4 unique的作用是“去掉”容器中相邻元素的重复元素 注意:用unique只 ...
- iOS 根据域名查询 IP 地址
在 iOS 开发中,如果需要知道网站的 IP 地址: #include <netdb.h> #include <arpa/inet.h> NSString *webSiteSt ...
- nyoj 82
题目:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=82 2018-06-23 23:44:05 p.s.自己省错题了: 描述 一个叫ACM的 ...
- js中的关键字与保留字
关键字就是指:js中用到的单词,比如var : function: 保留字是指:js以后可能会发展成为关键字的,先保留起来不让你用.比如class,要是给一个对象添加class:obj.classNa ...