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--No.010 Regular Expression Matching
10. Regular Expression Matching Total Accepted: 89193 Total Submissions: 395441 Difficulty: Hard Imp ...
- [Objective-C语言教程]预处理器(18)
Objective-C预处理器不是编译器的一部分,而是编译过程中的一个单独步骤. 简单来说,Objective-C预处理器只是一个文本替换工具,它指示编译器在实际编译之前进行必要的预处理. 我们将Ob ...
- 使用Chrome开发者工具调试Android端内网页(微信,QQ,UC,App内嵌页等)
使用Chrome开发者工具调试Android端内网页(微信,QQ,UC,App内嵌页等) 前言 移动端页面调试一直是好多朋友头疼的问题,iOS 由于其封闭的特性和整体较高的性能,整体适配相对好做,调试 ...
- .net core通过发布nuget实现引用项目
1 获取 api key 登录 https://www.nuget.org/account 进行api key获取操作 2 安装 nuget package explorer 3 进入要发布的项目目 ...
- linux pidstat 命令详解
pidstat 概述 pidstat是sysstat工具的一个命令,用于监控全部或指定进程的cpu.内存.线程.设备IO等系统资源的占用情况.pidstat首次运行时显示自系统启动开始的各项统计信息, ...
- Shell脚本 | 截取包名
之前写 shell 脚本的几篇文章都是先大致介绍脚本的功能和写法,然后一股脑的给出完整的代码.并没有细致入微的解释脚本中的每一行是如何思考如何编写的. 今天反其道而行之,只介绍一行代码.争取能讲的清楚 ...
- 本地k8s环境minikube搭建过程
首先要安装docker这个环境是需要自己安装的.相关步骤如下: 1 2 3 4 5 6 7 8 9 10 11 yum install -y yum-utils device-mapper-persi ...
- Semaphore 与ThreadPoolExecutor 的使用
1. Semaphore 信号量 (阻塞) 优点:可以控制线程的数量,不会超出线程范围 缺点:当线程死锁时,永远没法释放,导致一直阻塞 在java中,提供了信号量Semaphore的支持. Sema ...
- Fibonacci快速实现(优化)
斐波那契数列的通俗解法是利用递推公式进行递归求解,我们可以更优化的去解决它. 方法一:通项公式 斐波那契数列的递推公式是f(n)=f(n-1)+f(n-2),特征方程为:x2=x+1,解该方程得(1+ ...
- [转]JS实现千分位
本文转自:https://www.cnblogs.com/lvmylife/p/8287247.html 方法一:正则实现 function format (num) { var reg=/\d{1, ...