如何将两只蜘蛛合二为一?

有两个蜘蛛使用相同的资源文件和几乎相同的结构。


SpiderA 包含:


import scrapy

import pkgutil


class StockSpider(scrapy.Spider):

    name = "spiderA"

    data = pkgutil.get_data("tutorial", "resources/webs.txt")

    data = data.decode()

    urls = data.split("\r\n")

    start_urls = [url + "string1"  for url in urls]


    def parse(self, response):

        pass

SpiderB 包含:


import scrapy

import pkgutil


class StockSpider(scrapy.Spider):

    name = "spiderB"

    data = pkgutil.get_data("tutorial", "resources/webs.txt")

    data = data.decode()

    urls = data.split("\r\n")

    start_urls = [url + "string2"  for url in urls]


    def parse(self, response):

        pass

如何结合spiderA和spiderB,并添加一个开关变量来crapy scral根据我的需要调用不同的spider?


慕码人8056858
浏览 173回答 2
2回答

ITMISS

尝试为蜘蛛类型添加单独的参数。您可以通过调用来设置它scrapy crawl myspider -a spider_type=second。检查此代码示例:import scrapyimport pkgutilclass StockSpider(scrapy.Spider):    name = "myspider"    def start_requests(self):        if not hasattr(self, 'spider_type'):            self.logger.error('No spider_type specified')            return        data = pkgutil.get_data("tutorial", "resources/webs.txt")        data = data.decode()        for url in data.split("\r\n"):            if self.spider_type == 'first':                url += 'first'            if self.spider_type == 'second':                url += 'second'            yield scrapy.Request(url)    def parse(self, response):        pass而且您始终可以创建基主类,然后从它继承,仅重载一个变量(添加到 url)和名称(用于单独调用)。

HUX布斯

spider_type 导致错误NameError: name 'spider_type' is not defined.它是蜘蛛类中的 self.spider_type。import scrapyimport pkgutilclass StockSpider(scrapy.Spider):    name = "myspider"    def start_requests(self):        if not hasattr(self, 'spider_type'):            self.logger.error('No spider_type specified')            return        data = pkgutil.get_data("tutorial", "resources/webs.txt")        data = data.decode()        for url in data.split("\r\n"):            if self.spider_type == 'first':                url += 'first'            if self.spider_type == 'second':                url += 'second'            yield scrapy.Request(url)    def parse(self, response):        pass使其更加严格和准确。scrapy crawl myspider -a spider_type='second'
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python