Scrapy получает все URL-адреса из домена и выходит за пределы домена на глубину 2

#web-scraping #scrapy #scrapy-splash #scrapy-pipeline

#очистка веб-страниц #scrapy #scrapy-splash #scrapy-конвейер

Вопрос:

Я пытаюсь очистить газету в Интернете, я хотел получить все URL-адреса в домене, и если есть какие-либо внешние URL-адреса (статьи из других доменов), упомянутые в статье, я могу захотеть пойти и получить эти URL-адреса. Другими словами, я хочу разрешить пауку перемещаться на глубину 3 (это в двух кликах от start_urls?). Может кто-нибудь посмотреть, дайте мне знать, правильный / неправильный фрагмент?

Любая помощь приветствуется.

Вот мой фрагмент кода:

 start_urls = ['www.example.com']
master_domain = tldextract.extract(start_urls[0]).domain
allowed_domains = ['www.example.com']
rules = (Rule(LinkExtractor(deny=(r"/search", r'showComment=', r'/search/')),
                            callback="parse_item", follow=True),
                 )

def parse_item(self, response):
    url = response.url
    master_domain = self.master_domain
    self.logger.info(master_domain)
    current_domain = tldextract.extract(url).domain
    referer = response.request.headers.get('Referer')
    depth = response.meta.get('depth')
    if current_domain == master_domain:
        yield {'url': url,
                     'referer': referer,
                     'depth': depth}
    elif current_domain != master_domain:
        if depth < 2:
            yield {'url': url,
                         'referer': referer,
                         'depth': depth}
        else:
            self.logger.debug('depth is greater than 3')
  

Ответ №1:

Откройте настройки и добавьте

 DEPTH_LIMIT = 2
  

Для получения более подробной информации см.

Нет необходимости проверять домен,

 if current_domain == master_domain:
  

когда вы разрешили домены, он автоматически будет следовать только за теми доменами, которые указаны в allowed_domains