阅读本文之前需要安装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创建项目与模板使用的更多相关文章

  1. Keil MDK STM32系列(五) 使用STM32CubeMX创建项目基础结构

    Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...

  2. Scrapy学习(二)、安装及项目结构

    一.安装 1.安装pywin32,下载地址:https://sourceforge.net/projects/pywin32/files/pywin32/ 我选择的是Build 221,点进去,根据自 ...

  3. struts2官方 中文教程 系列二:Hello World项目

    先贴个本帖的地址,免得其它网站被爬去了struts2入门系列二之Hello World  即 http://www.cnblogs.com/linghaoxinpian/p/6898779.html ...

  4. Scrapy教程——搭建环境、创建项目、爬取内容、保存文件

    1.创建项目 在开始爬取之前,您必须创建一个新的Scrapy项目.进入您打算存储代码的目录中,运行新建命令. 例如,我需要在D:\00Coding\Python\scrapy目录下存放该项目,打开命令 ...

  5. Atlassian JIRA 插件开发之二 安装和创建项目

    安装参考 https://developer.atlassian.com/server/framework/atlassian-sdk/install-the-atlassian-sdk-on-a-w ...

  6. C# Socket系列二 简单的创建 socket 通信

    看了系列一 我们开启了对socket tcp的监听状态,那么这一章我们来讲解怎么创建socket的通信代码 我新建一个类 TSocketBase public abstract class TSock ...

  7. BizTalk开发系列(二十四) BizTalk项目框架建议

    Asp.NET有MVC框架,大部份的开发都是按照MVC进行的.BizTalk是面向消息的开发,不能完全采用分层的开发模式.而微软只提供了 BizTalk项目开发的基本策略,通过分析相关的Complex ...

  8. 【Electron】Electron开发入门(二):创建项目Hello Word

    创建简单的Electron程序 1.首先,切换到你的项目空间,我的在 D:\ProjectsSpace\ElectronProjects\ElectronTest,ElectronTest是案例项目文 ...

  9. Cordova入门系列(一)创建项目 转发 https://www.cnblogs.com/lishuxue/p/6008678.html

    版权声明:本文为博主原创文章,转载请注明出处 Cordova是什么? 初学Cordova的人,虽然了解一点点,知道Cordova是用来将html, css, js变成app的,但并不知道到底是怎么用的 ...

随机推荐

  1. fast.ai(零)windows + pytorch 0.4

    一.下载 git clone https://github.com/fastai/fastai.git 或者直接下载下来 二.安装pytorch 去官网安装建议安装即可 https://pytorch ...

  2. python多线程获取子线程任务返回值

    今天想实现多线程更新资产信息,所以使用到了threading,但是我需要每个线程的返回值,这就需要我在threading.Thread的基础上进行封装 def auto_asset(node): re ...

  3. Android使用AIDL跨进程通信

    一.基本类型 1.AIDL是什么 AIDL是Android中IPC(Inter-Process Communication)方式中的一种,AIDL是Android Interface definiti ...

  4. 项目实战安装工具箱Busybox

    1.Busybox是一个集成了100多个最常用Linux命令的软件工具箱,他在单一的可执行文件中提供了精简的UNIX工具集.该工具箱中包含了常见简单实用的工具如cat.echo.grep.find.m ...

  5. 个人觉得非常好用的mysql客户端工具的HeidiSQL

    感觉比Navicat好用,能显示注释,而且还有绿色版,轻量级 下载地址:http://www.heidisql.com/download.php

  6. 微信小程序bug记录与解决

    微信小程序bug记录 textarea textarea在模拟器上没有padding,可是在真机上会自带padding,而且在外部改不了,并且在安卓和IOS上padding还不一样 第一张图是在开发工 ...

  7. SpringBoot(3) 文件上传和访问

    springboot文件上传 MultipartFile file,源自SpringMVC MultipartFile 对象的transferTo方法,用于文件保存(效率和操作比原先用FileOutS ...

  8. JavaWeb学习 (十三)————JSP

    一.什么是JSP? JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术. JSP这门技术的最大的特点在于,写jsp就像在写h ...

  9. rootkit(kbeast-v1)

    Rootkit有应用级.内核级和硬件级 用的比较多的是内核级别,比如基于linux LKM编写的rootkit rootkit可以理解为一个超级管理员的工具箱,这个工具箱通过调用系统LKM接口可以动态 ...

  10. 通向全栈之路(6)—无密码ssh连接

    (1)在用户目录下新增一个 .ssh文件 mkdir .ssh (2)生成公钥.私钥 ssh-keygen -t rsa -b 4096 -C "mail@xxx.com" (3) ...