Parsing robots txt with scrapy

Теги: crawlers  python 

За проверку robots.txt в [scrapy] отвечает встреонный middlewire, с самым высоким приоритетом

{
    'scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware': 100, # here
    'scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware': 300,
    'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware': 350,
    'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware': 400,
    'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': 500,
    'scrapy.downloadermiddlewares.retry.RetryMiddleware': 550,
    'scrapy.downloadermiddlewares.ajaxcrawl.AjaxCrawlMiddleware': 560,
    'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware': 580,
    'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 590,
    'scrapy.downloadermiddlewares.redirect.RedirectMiddleware': 600,
    'scrapy.downloadermiddlewares.cookies.CookiesMiddleware': 700,
    'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 750,
    'scrapy.downloadermiddlewares.stats.DownloaderStats': 850,
    'scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware': 900,
}

Рекомендуется не влезать в эту часть, а управлять ею за счет настройки параметров и парсера.

Исходный код обработчика robots.txt находится тут: обработчик инициализирует класс и получает строки из robots.txt, после чего преобразует их в объект RobotFileParser из urllib.robotparser, который хранить распарсенные данные и позволяет сравниваться с ними при проверке запрашиваемого урла в дальнейшем.

В scrapy реализовано несколько парсеров robots.txt:

Два последних парсера так-же реализуют Martijn Koster’s 1996 draft specification

Иногда нужно написать свой парсер (например когда необходимо сохзранять строки, содержащиеся в robots.txt или извдлекать и обрабатывать sitemap). Это можно сделать унаследовавшись от абстрактного базового класса вот так

Смотри еще: