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的,但并不知道到底是怎么用的 ...
随机推荐
- ELKstack简介及环境部署
ELK工作流程图 环境准备 安装Logstash依赖包JDK Logstash的运行依赖于Java运行环境, Logstash 1.5以上不低于java 7推荐使用最新版本的Java.由于只是运行Ja ...
- Shell脚本中实现自动补全功能
对于Linuxer来说,自动补全是再熟悉不过的一个功能了.当你在命令行敲下部分的命令时,肯定会本能地按下Tab键补全完整的命令,当然除了命令补全之外,还有文件名补全. Bash-completion ...
- 从零开始学 Web 之 移动Web(七)Bootstrap
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- 从零开始学 Web 之 ES6(三)ES6基础语法一
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- Spring的Java配置方式—@Configuration和@Bean实现Java配置
Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置. 1.@Configuration 和 @BeanSpring的Java配置方式是通过 @Configuration 和 @Be ...
- Ajax之跨域访问与JSONP
前言 同源策略的限制,使得ajax无法发出跨域请求.在许多情况下,我们需要让ajax支持跨域.以下是其中一种解决方案(JSONP).JSONP解决了跨域数据访问的问题. 在html中,具有src属性的 ...
- MyBatis 分页之拦截器实现
分页是WEB程序中常见的功能,mybatis分页实现与hibernate不同,相比hibernate,mybatis实现分页更为麻烦.mybatis实现分页需要自己编写(非逻辑分页RowBounds) ...
- C/C++ 中嵌入 arm 汇编
GCC编译器支持直接在C或者C++代码中,嵌入ARM汇编代码.其基本格式非常简单,大致如下: __asm__ [__volatile__] ( assembler template : [output ...
- 第4章 Selenium2-java WebDriver API (二)
4.8 定位一组元素 定位一组元素的方法与定位单个元素的方法类似,唯一的区别是在单词element后面多了一个s表示复数.定位一组元素一般用于以下场景: ·批量操作元素,例如勾选页面上所有的复选框. ...
- 2017年最新20个轻量的 JavaScript 库和插件
下面这个列表中的免费 JavaScript 插件都是今年发布的,没有臃肿的一体化的框架,它们提供轻量级的解决方案,帮助 Web 开发过程更容易和更快.提供的插件可以创建滑块.响应式菜单.模态窗口.相册 ...