#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