2016-08-08 2 views
0

Я использую Scrapy для просмотра и сбора данных, но я обнаружил, что паук сканирует множество нежелательных страниц. Я бы предпочел, чтобы паук делал это только начиная с набора определенных страниц, а затем анализировал контент на этих страницах, а затем заканчивал. Я попытался реализовать правило, подобное приведенному ниже, но оно все равно сканирует целый ряд других страниц. Любые предложения о том, как подойти к этому?Scrapy - только указанные целевые URL

rules = (
    Rule(SgmlLinkExtractor(), callback='parse_adlinks', follow=False), 
) 

Спасибо!

ответ

0

Ваш экстрактор извлекает каждую ссылку, потому что у нее нет аргументов правил.

Если вы посмотрите на official documentation, вы заметите, что у Scrapy LinkExtractors есть много параметров, которые вы можете настроить для настройки того, что извлекает ваш linkextractors.

Пример:

rules = (
    # only specific domain links 
    Rule(LxmlLinkExtractor(allow_domains=['scrapy.org', 'blog.scrapy.org']), <..>), 
    # only links that match specific regex 
    Rule(LxmlLinkExtractor(allow='.+?/page\d+.html)', <..>), 
    # don't crawl speicific file extensions 
    Rule(LxmlLinkExtractor(deny_extensions=['.pdf','.html'], <..>), 
) 

Вы также можете установить разрешённые домены для паука, если вы не хотите, чтобы это интересно куда-то:

class MySpider(scrapy.Spider): 
    allowed_domains = ['scrapy.org'] 
    # will only crawl pages from this domain^
+0

Это пятно на спасибо! В конце я использовал комбинацию явного разрешения и отказа, чтобы правила корректно работали. Спасибо за вашу помощь. – Mike77

Смежные вопросы