为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕码人8056858 2021-12-08 10:22:19
有两个蜘蛛使用相同的资源文件和几乎相同的结构。SpiderA 包含:import scrapyimport pkgutilclass 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):        passSpiderB 包含:import scrapyimport pkgutilclass 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?
查看完整描述

2 回答

?
ITMISS

TA贡献1871条经验 获得超8个赞

尝试为蜘蛛类型添加单独的参数。您可以通过调用来设置它scrapy crawl myspider -a spider_type=second。检查此代码示例:


import scrapy

import pkgutil


class 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)和名称(用于单独调用)。


查看完整回答
反对 回复 2021-12-08
?
HUX布斯

TA贡献1876条经验 获得超6个赞

spider_type 导致错误


NameError: name 'spider_type' is not defined.

它是蜘蛛类中的 self.spider_type。


import scrapy

import pkgutil


class 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'


查看完整回答
反对 回复 2021-12-08
  • 2 回答
  • 0 关注
  • 169 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信