к тому времени, когда CrawlSpider достигает второго URL-адреса, правила больше не являются правильными, поскольку они основаны на первом URL-адресе.

у Scrapy Scrapper, который использует CrawlSpider для сканирования сайтов, просмотра их внутренних ссылок и очистки содержимого любых внешних ссылок (ссылок с доменом, отличным от исходного домена).

Мне удалось сделать это с 2 правилами, но они основаны на домене просматриваемого сайта. Если я хочу запустить это на нескольких веб-сайтах, я сталкиваюсь с проблемой, потому что я не знаю, какой "start_url" я сейчас использую, поэтому я не могу соответствующим образом изменить правило.

Вот то, что я придумал, это работает для одного веб-сайта, и я не уверен, как применить его к списку веб-сайтов:

class HomepagesSpider(CrawlSpider):
    name = 'homepages'

    homepage = 'http://www.somesite.com'

    start_urls = [homepage]

    # strip http and www
    domain = homepage.replace('http://', '').replace('https://', '').replace('www.', '')
    domain = domain[:-1] if domain[-1] == '/' else domain

    rules = (
        Rule(LinkExtractor(allow_domains=(domain), deny_domains=()), callback='parse_internal', follow=True),
        Rule(LinkExtractor(allow_domains=(), deny_domains=(domain)), callback='parse_external', follow=False),
    )

    def parse_internal(self, response):

        # log internal page...

    def parse_external(self, response):

        # parse external page...

Вероятно, это можно сделать, просто передав start_url в качестве аргумента при вызове скребка, но я ищу способ сделать это программно в самом скребке.

Есть идеи? Спасибо!

Саймон.

Ответы на вопрос(2)

Ваш ответ на вопрос