scrapy系列(二)——startproject、genspider创建项目与模板使用
阅读本文之前需要安装scrapy,如果你还没有安装该框架,那么可以看之前一篇文章scrapy1.2windows安装。
现在默认大家都已经成功的安装了scrapy可以开始大展身手了。本文主要讲的是新建项目,有人说了,网上那么多的新建项目介绍,也就一条命令的事,你也好意思单拉出一章来讲?在这里我讲的是大家可能没有注意的事项,希望大家还是看一看的好。
还是老规矩先上官网上的文档介绍:

文档中可以看到新建项目的时候只需要输入一条简单的指令scrapy startproject projectName。如果成功创建项目的话那么控制台会返回:

相信有经验的人经常看到这条信息吧,我们可以看到第一行信息:使用模板创建项目。这也是本文主要讲的内容--模板。
先来看看源码中相关代码:

创建项目时会执行run方法,首先判断startproject后面是不是只有一个参数,然后判断项目名称是否符合语法规则,这都不是重点,扫一眼就过去不用太在意。后面就是根据模板来创建项目的主要代码了,那么模板路径是什么呢?在方法templates_dir中就有介绍了。从代码中可以看到,_templates_base_dir的值应该是从settings中获取,如果该值为空,那么它就是scrapy的path与templates拼接成的路径。而settings中的TEMPLATES_DIR对应的值也是or后面的路径值,如下图所示:然后scrapy将会根据路径值来创建项目相关文件。

那么我们知道这个鬼东西有什么用呢?仅仅是和同道吹牛吗?
个人觉得这个东西还是挺有作用的。首先目前创建的项目路径中settings.py如下图所示:

文件中ROBOTSTXT_OBEY的值为True,意思是遵守robots协议,那么很多网站就没法搞了,比如百度之类的,所以就要修改该值。如果我们需要创建大量的项目难道还要一个个的修改吗?所以可以在模板中修改,将其值改为False,那么以后我们创建的项目里的settings.py文件ROBOTSTXT_OBEY值都是False了。我们还可以向settings.py.tmpl模板文件中填充一些我们需要用到的值,比如default_settings.py文件中默认的settings键值对,这样每次使用的时候就不会在自己项目的settings.py找不到相关的键值了。处理一类的项目比如采集各种新闻网站,我们需要采集的字段都一样,也就是item一样,那么我们的items.py和pipelines.py文件就可以用模板构建,这样就不用每次都要自己手写了。我们还可以在里面构造自己的模板文件,但是这样就需要修改startproject.py源码文件中的TEMPLATES_TO_RENDER值。有兴趣的小伙伴可以自己动手试试。
使用模板可以为我们处理大量相似项目的新建提供极大的便利。现在项目已经按照你的预期进行创建了,我们可以开始下一步发行动了,创建spider。
我刚开始用scrapy的时候,创建spider都是一个个复制的,复制以后挨个修改,有时候稍微漏了一两处地方都会带来一些问题。要是纯手写的话,出错的几率比复制spider还大。后来看文档才发现scrapy提供了命令让我们可以根据模板创建spider,使用的命令是genspider。这个命令就不带着大家看源码了, 有兴趣的小伙伴可以自己看看。想查看该命令的用法可以在命令行中输入scrapy genspider, 可以看到如下信息:

scrapy genspider -l 可以输出所有可用模板信息。如果你想知道一种模板,比如crawl里面是什么内容的时候,可以使用命令scrapy genspider -d template (crawl)。等你对几个模板熟悉以后就可以使用scrapy genspider (-t template 括号内可省略,省略的话默认使用basic模板) name domain创建spider。注意这里的name不能使用project的name, 也不能使用已存在的spider的name,不然报错。如果你想覆盖以前的spider , 可以在genspider后加--force参数, 后面的name是被覆盖spider的name。我们还可以为框架添加自己设计的模板,模板的位置在上面提到的TEMPLATES_DIR路径下的templates\spiders文件夹中。可以在spider模板中增加自己常用的方法,也可以设计一个简单的类框架,以适应你所需要采集的页面规则。
如果修改了TEMPLATES_DIR的值来使用自己构建的模板的话,那么spider和project模板都需要构建,不然会找不到模板报错。
希望这期的模板能给大家带来点作用。
scrapy系列(二)——startproject、genspider创建项目与模板使用的更多相关文章
- Keil MDK STM32系列(五) 使用STM32CubeMX创建项目基础结构
Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...
- Scrapy学习(二)、安装及项目结构
一.安装 1.安装pywin32,下载地址:https://sourceforge.net/projects/pywin32/files/pywin32/ 我选择的是Build 221,点进去,根据自 ...
- struts2官方 中文教程 系列二:Hello World项目
先贴个本帖的地址,免得其它网站被爬去了struts2入门系列二之Hello World 即 http://www.cnblogs.com/linghaoxinpian/p/6898779.html ...
- Scrapy教程——搭建环境、创建项目、爬取内容、保存文件
1.创建项目 在开始爬取之前,您必须创建一个新的Scrapy项目.进入您打算存储代码的目录中,运行新建命令. 例如,我需要在D:\00Coding\Python\scrapy目录下存放该项目,打开命令 ...
- Atlassian JIRA 插件开发之二 安装和创建项目
安装参考 https://developer.atlassian.com/server/framework/atlassian-sdk/install-the-atlassian-sdk-on-a-w ...
- C# Socket系列二 简单的创建 socket 通信
看了系列一 我们开启了对socket tcp的监听状态,那么这一章我们来讲解怎么创建socket的通信代码 我新建一个类 TSocketBase public abstract class TSock ...
- BizTalk开发系列(二十四) BizTalk项目框架建议
Asp.NET有MVC框架,大部份的开发都是按照MVC进行的.BizTalk是面向消息的开发,不能完全采用分层的开发模式.而微软只提供了 BizTalk项目开发的基本策略,通过分析相关的Complex ...
- 【Electron】Electron开发入门(二):创建项目Hello Word
创建简单的Electron程序 1.首先,切换到你的项目空间,我的在 D:\ProjectsSpace\ElectronProjects\ElectronTest,ElectronTest是案例项目文 ...
- Cordova入门系列(一)创建项目 转发 https://www.cnblogs.com/lishuxue/p/6008678.html
版权声明:本文为博主原创文章,转载请注明出处 Cordova是什么? 初学Cordova的人,虽然了解一点点,知道Cordova是用来将html, css, js变成app的,但并不知道到底是怎么用的 ...
随机推荐
- [Leetcode]827.使用回溯+标记解决最大人工岛问题
在二维地图上, 0代表海洋, 1代表陆地,我们最多只能将一格 0 海洋变成 1变成陆地. 进行填海之后,地图上最大的岛屿面积是多少?(上.下.左.右四个方向相连的 1 可形成岛屿) 示例 1: 输入: ...
- 关于resin的illegal utf8 encoding at (190)解决方式
最近在项目开发中,出现了编码异常,内容如下:- illegal utf8 encoding at (190)com.caucho.jsp.JspParseException: illegal utf8 ...
- DDD实战进阶第一波(三):开发一般业务的大健康行业直销系统(搭建支持DDD的轻量级框架二)
了解了DDD的好处与基本的核心组件后,我们先不急着进入支持DDD思想的轻量级框架开发,也不急于直销系统需求分析和具体代码实现,我们还少一块, 那就是经典DDD的架构,只有了解了经典DDD的架构,你才能 ...
- gitlab ssh_key
ubuntu下生成git的密钥 1 生成ssh key 执行 命令 ssh-keygen -t rsa -C “wangwei@**.com.cn” 邮箱根据自己实际修改,一直回车 2 查看生成的密钥 ...
- UNPIVOT
UNPIVOT UNPIVOT则相反,把数据从列旋转到行 SELECT * INTO product_vlues FROM ( SELECT NAME , ...
- 分布式系统CAP理论以及注册中心选择
CAP定理:指的是在一个分布式系统中,Consistency(一致性). Availability(可用性).Partition tolerance(分区容错性),三者不可同时获得. 一致性(C-数据 ...
- 【jQuery源码】整体架构
jQuery源码可以精简为以下内容: 方框上面的代码根据Jq注释我们可以知道是对AMD规范的支持. jQuery整体上被包裹在一个匿名函数中,这个匿名函数再作为另一个匿名函数的参数被传入,形参fact ...
- Debatching(Splitting) XML Message in Orchestration using DefaultPipeline - BizTalk 2010
Debatching(Splitting) XML Message in Orchestration using DefaultPipeline - BizTalk 2010 In this po ...
- 整合Spring和SpringMVC
1.Spring容器和SpringMVC容器的关系 Spring容器是一个父容器,SpringMVC容器是一个子容器,它继承自Spring容器.因此,在SpringMVC容器中,可以访问到Spring ...
- log | logstash
log | logstash log logstash enter description here 1. 安装 1. 安装java java -version 检查java版本 没有安装则到or ...