Итак, я передаю start_url
, который является страницей новостных статей (например, cnn.com ). Но я просто хочу извлечь новостную статью, я не хочу переходить по ссылкам на странице статьи. Для этого я использую CrawlSpider
со следующим правилом:
rules = (
Rule(LinkExtractor(allow=('regexToMatchArticleUrls',),
deny=('someDenyUrls')), callback='parse_article_page'),
)
def parse_article_page(self,response):
#extracts the title, date, body, etc of article
Я включил scrapy.spidermiddlewares.depth.DepthMiddleware
и установил DEPTH_LIMIT = 1
.
Тем не менее, я все еще получаю ссылки, сканированные со страниц отдельных статей, которые совпадают с regexToMatchArticleUrls
, поскольку они являются ссылками на другие части того же веб-сайта (и я не могу сделать регулярное выражение более ограничительным).
Но почему эти ссылки вообще сканируются, когда DEPTH_LIMIT=1
? Это потому, что DEPTH_LIMIT
сбрасывается для каждой ссылки, извлеченной из LinkExtractor
, т.е. URL страницы статьи? Есть ли способ заставить DEPTH_LIMIT
работать или расширить DepthMiddleware
, чтобы не сканировать ссылки на странице статьи? Спасибо!