为Scrapy项目提供多个Spider

为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

这里我们以要爬取某网站首页入口为例, 生成一个entrancespider.
Scrapy会为我们在spiders文件夹中生成一个entrance.py. 根据需要, 再item.py中添加相应的字段.

为每个Spider单独指定Pipeline

当我们编写完代码后可能会遇到一个问题, 在我们准备使用这个新的spider爬虫的时候, 并不准备让以前spiderpipeline应用到新的spider身上.

一种笨的方法是, 你在用某个spider的时候, 先注释掉无关的pipeline设置(在settings.py中). 然而这并非长久之计, 且十分反程序猿, 何况后面我们还要考虑到多个spider并发的情况.

在看了一下spider的变量之后, 显然(逃, 我们可以用spidername值来轻松指定.

在我们pipeline.py中, 为需要区分spider的方法添加一个spider参数, 主要是process_item(self, item, spider), close_spider(self, spider) 以及 open_spider(self, spider), 写一行if就搞定啦

if spider.name == 'jobCrawler':

后面再更新多个并发的情形

上一篇:***常见复杂SQL语句(含统计类SQL)


下一篇:「刷排名」网站快照为什么更新缓慢或不更新?如何解决?