к тому времени, когда 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 в качестве аргумента при вызове скребка, но я ищу способ сделать это программно в самом скребке.
Есть идеи? Спасибо!
Саймон.