【scrapy 动态配置爬虫】同进程多爬虫,基础事例

       有很多时候我们需要从多个网站爬取所需要的数据,比如我们想爬取多个网站的新闻,将其存储到数据库同一个表中。我们是不是要对每个网站都得去定义一个Spider类呢? 其实不需要,我们可以通过维护一个规则配置表或者一个规则配置文件来动态增加或修改爬取规则,然后程序代码不需要更改就能实现多个网站爬取。

       要这样做,我们就不能再使用前面的scrapy crawl test这种命令了,我们需要使用编程的方式运行Scrapy spid

       可以利用scrapy提供的核心API通过编程方式启动scrapy,代替传统的scrapy crawl启动方式。Scrapy构建于Twisted异步网络框架基础之上,因此你需要在Twisted reactor里面运行。首先你可以使用scrapy.crawler.CrawlerProcess这个类来运行你的spider,这个类会为你启动一个Twisted reactor,并能配置你的日志和shutdown处理器。所有的scrapy命令都使用这个类

        首先在main.py文件中修改代码,不能用excute,使用如下代码:

import scrapy
from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings
process = CrawlerProcess(get_project_settings())
process.crawl('maoyan')#爬虫名称
process.crawl('maoyan2')#爬虫名称
process.start() # the script will block here until the crawling is finished

         测试同进程的的方发,修改crawl源码,并在setting标注。

         首先在item.py同目录下创建一个文件夹,取名mycmd。其次在文件夹中建立一个空值的__init__.py文件还有一个,mycrawl.py文件,然把下边的代码复制进去。,然后在setting.py文件中加入COMMANDS_MODULE = 'basicdemo.mycmd',其中basicdemo是工程名称,mycmd是文件夹名称

import os
from scrapy.commands import ScrapyCommand
from scrapy.utils.conf import arglist_to_dict
from scrapy.utils.python import without_none_values
from scrapy.exceptions import UsageError


class Command(ScrapyCommand):

    requires_project = True

    def syntax(self):
        return "[options] <spider>"

    def short_desc(self):
        return "Run a spider"

    def add_options(self, parser):
        ScrapyCommand.add_options(self, parser)
        parser.add_option("-a", dest="spargs", action="append", default=[], metavar="NAME=VALUE",
                          help="set spider argument (may be repeated)")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值