2015-01-22 2 views
-1

Есть ли способ установить allow_domains для start_url? Для каждого URL-адреса в start_urls я хочу ограничить обход домена в этом URL-адресе. После обхода сайта мне понадобится удалить этот домен из allowed_domains. Я предполагаю, что одним из способов было бы динамическое добавление/удаление URL-адресов в allowed_domains?Установите allow_domains на starter_url в scrapy?

Связанные вопрос: Crawl multiple domains with Scrapy without criss-cross

+0

Что ты пробовал? возможно реализовать метод __init __(), который делает это, да. –

+0

Мне нужно, чтобы изменения произошли после того, как каждый start_url с связанными обходами был обработан. Разве __init__ не будет вызван только один раз, когда будет создан spiderclass? Чтобы уточнить, у меня будет несколько start_urls, которые будут переданы из mysql db в один экземпляр spider. – sboss

+0

Есть ли способ использовать текущий start_url в правиле? – sboss

ответ

1

Вы можете попробовать что-то вроде этого, проверяя, что выход паук Requests для каждого ответа являются для одной и той же области, как тот самый ответ (предупреждение: не тестировалось):

from scrapy.http import Request 
from scrapy.utils.httpobj import urlparse_cached 

class CrissCrossOffsiteMiddleware(object): 

    def process_spider_output(self, response, result, spider): 
     domainr = urlparse_cached(response.url).hostname 
     for x in result: 
      if isinstance(x, Request): 
       if x.dont_filter: 
        yield x 
       else: 
        domaino = urlparse_cached(x).hostname 
        if domaino == domainr: 
         yield x 
      else: 
       yield x 
Смежные вопросы