Python (Scrapy) - Как можно вызвать собственный объект от __init__ к custom_settings? - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть объект с именем url_local внутри метода __init__, и я хочу передать в качестве объекта custom_settings['FEED_URI'], чтобы переименовать мой формат JSON в нечто вроде 'data / vivareal / vivareal_ url_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
}

1 Ответ

0 голосов
/ 10 декабря 2018

Вы можете сделать это так

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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...