Python(Scrapy)如何将self对象从初始化调用到自定义设置?

2024-06-18 13:12:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我在__init__方法中有一个名为url_local的对象,我想作为对象传递给custom_settings['FEED_URI'],将我的json格式重命名为类似“data/vivareal/vivarealurl_local.json”的格式。我能帮忙吗?你知道吗

class VivarealCrawl(scrapy.Spider):
name = 'vivareal'
allowed_domains = ['www.vivareal.com.br']

def __init__(self, *args, **kwargs):
    super(VivarealCrawl, self).__init__(*args, **kwargs)
    arg_cidade = kwargs.get('cidade')
    url_vivareal_venda = 'https://www.vivareal.com.br/venda/'
    url_tipologia_terreno1 = '/lote-terreno_residencial/?__vt=ald:2'
    url_tipologia_terreno2 = '/lote-terreno_comercial'
    url_local = 'ceara/fortaleza'


    if arg_cidade is not None:
        if arg_cidade.lower() == 'bh':
            url_local = 'minas-gerais/belo-horizonte'
        elif arg_cidade.lower() == 'bel':
            url_local = 'para/belem'
        elif arg_cidade == 'sal':
            url_local='bahia/salvador'
        elif arg_cidade == 'arj':
            url_local = 'sergipe/aracaju'

    url1 = ''.join([url_vivareal_venda, url_local, url_tipologia_terreno1])
    url2 = ''.join([url_vivareal_venda, url_local, url_tipologia_terreno2])

    self.start_urls = [
        url1, # terreno residencial
        url2  # terreno comercial
    ]

# location of json file
custom_settings = {
    'FEED_EXPORT_ENCODING': 'utf-8'
    , 'FEED_FORMAT': "json"
    , 'FEED_URI': 'data/vivareal/vivareal.json'
    , 'CLOSESPIDER_PAGECOUNT': 5
}

Tags: 对象selfjsonurlinitlocalfeedarg
1条回答
网友
1楼 · 发布于 2024-06-18 13:12:44

你可以这样做

class VivarealCrawl(scrapy.Spider):
    name = 'vivareal'
    allowed_domains = ['www.vivareal.com.br']

    # location of json file
    custom_settings = {
        'FEED_EXPORT_ENCODING': 'utf-8'
        , 'FEED_FORMAT': "json"
        , 'FEED_URI': 'data/vivareal/vivareal_%(cidade)s.json'
        , 'CLOSESPIDER_PAGECOUNT': 5
    }

    def __init__(self, *args, **kwargs):
        super(Test1SpiderSpider, self).__init__(*args, **kwargs)
        url_vivareal_venda = 'https://www.vivareal.com.br/venda/'
        url_tipologia_terreno1 = '/lote-terreno_residencial/?__vt=ald:2'
        url_tipologia_terreno2 = '/lote-terreno_comercial'

        if self.cidade is not None:
            if self.cidade.lower() == 'bh':
                self.cidade = 'minas-gerais/belo-horizonte'
            elif self.cidade.lower() == 'bel':
                self.cidade = 'para/belem'
            elif self.cidade == 'sal':
                self.cidade='bahia/salvador'
            elif self.cidade == 'arj':
                self.cidade = 'sergipe/aracaju'
        else:
            self.cidade = 'ceara/fortaleza'

        url1 = ''.join([url_vivareal_venda, url_local, url_tipologia_terreno1])
        url2 = ''.join([url_vivareal_venda, url_local, url_tipologia_terreno2])

        self.start_urls = [
            url1, # terreno residencial
            url2  # terreno comercial
        ]

然后像蜘蛛一样跑

scrapy crawl vivareal -a cidade="123"

相关问题 更多 >