为Scrapy项目提供多个Spider
scrapy startproject project name
在终端输入上述命令后,会根据生成一个完整的爬虫项目
此时的项目树如下
|-- JobCrawler
|-- __init__.py
|-- items.py
|-- middlewares.py
|-- pipelines.py
|-- settings.py
`-- spiders
|-- __init__.py
|-- spider.py
scrapy.cfg
可以看到默认会生成一个名为spider.py
的文件供我们编写spider
.
如果这个时候我们要再写多一个spider
, 但是不想手动去配置相应的文件, 可以用以下命令生成一个spider
# domain 域名
scrapy genspider [options] name domain
options
可以选择自己需要的参数, 若留空, 则默认使用basic
模板生成spider
这里我们以要爬取某网站首页入口为例, 生成一个entrance
的spider
.
Scrapy
会为我们在spiders
文件夹中生成一个entrance.py
. 根据需要, 再item.py
中添加相应的字段.
为每个Spider单独指定Pipeline
当我们编写完代码后可能会遇到一个问题, 在我们准备使用这个新的spider
爬虫的时候, 并不准备让以前spider
的pipeline
应用到新的spider
身上.
一种笨的方法是, 你在用某个spider
的时候, 先注释掉无关的pipeline
设置(在settings.py
中). 然而这并非长久之计, 且十分反程序猿, 何况后面我们还要考虑到多个spider
并发的情况.
在看了一下spider
的变量之后, 显然(逃, 我们可以用spider
的name
值来轻松指定.
在我们pipeline.py
中, 为需要区分spider
的方法添加一个spider
参数, 主要是process_item(self, item, spider)
, close_spider(self, spider)
以及 open_spider(self, spider)
, 写一行if就搞定啦
if spider.name == 'jobCrawler':
后面再更新多个并发的情形