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的,但并不知道到底是怎么用的 ...
随机推荐
- Origin的使用问题集锦
在空间上看见同学转的一篇关于学术研究的文章,由于不常常上空间,更别说在上面看一些好的文章,所以特意将那篇文章整理到自己的博客中,方便以后做科研的时候能够用到,原文出处:http://user.qzon ...
- Spring Boot定制启动图案
启动图案 Spring Boot在启动的时候会显示一个默认的Spring的图案,对应的类为SpringBootBanner. . ____ _ __ _ _ /\\ / ___'_ __ _ _(_) ...
- 3-2 模板语法(vue中的内容写法)
插值表达式.v-text.v-html的用法
- 使用Chrome开发者工具调试Android端内网页(微信,QQ,UC,App内嵌页等)
使用Chrome开发者工具调试Android端内网页(微信,QQ,UC,App内嵌页等) 前言 移动端页面调试一直是好多朋友头疼的问题,iOS 由于其封闭的特性和整体较高的性能,整体适配相对好做,调试 ...
- java-Timer类使用方法
Timer: public Timer()创建一个新计时器.相关的线程不 作为守护程序运行. 方法摘要: void schedule(TimerTask task, Date time) ...
- show profiles 分析sql耗时瓶颈
1.首先查看是否开启profiling功能 SHOW VARIABLES LIKE '%pro%'; 或者 SELECT @@profiling; 2.开启profiling ; 3.执行sql语句例 ...
- 金山wps面经
前言: 金山wps笔试是好久之前的了,忘记具体几号了.当时在华师参加的宣讲会,然后线下笔试通过了, 昨天(4月2号通知现场面试).今天是在华工酒店进行面试的,一二面一起进行的 一面: 1: 自我介绍 ...
- K均值聚类
聚类(cluster)与分类的不同之处在于, 分类算法训练过程中样本所属的分类是已知的属监督学习. 而聚类算法不需要带有分类的训练数据,而是根据样本特征的相似性将其分为几类,又称为无监督分类. K均值 ...
- JS之BOM、DOM
一.BOM对象 1,window对象 所有浏览器都支持window对象,从概念上讲:一个HTML文档对应一个window对象,从功能上讲:控制浏览器窗口的,从使用上讲:window对象不需要创建对象, ...
- 【F12】chrome浏览器中 F12 功能的简单介绍
chrome浏览器中 F12 功能的简单介绍 由于F12是前端开发人员的利器,所以我自己也在不断摸索中,查看一些博客和资料后,自己总结了一下来帮助自己理解和记忆,也希望能帮到有需要的小伙伴,嘿嘿! 首 ...