2013-03-18 2 views
1

Как я могу отрицать выскабливание определенных частей веб-сайта, используя Правила в Scrapy.Правило запрета скрининга

Я хочу, чтобы Scrapy выполняла обход ссылок на mathcing www.example.com/help/nl/ en, лишив всех ссылок, соответствующих www.example.com/help/en/ и www.example.com/website/.

У меня есть следующий код:

class MySpider(CrawlSpider): 
    name = 'myspider' 
    allowed_domains = ['example.com', ] 
    start_urls = ['https://www.example.com/help/nl/', ] 
    rules = (
     Rule(SgmlLinkExtractor(allow=(r'/help/nl/',)), callback='parse_response'), 
    ) 

Но ползает весь сайт.

UPDATE

Я хочу Scrapy следовать только ссылки, содержащие/помощь/нл/

Rule(SgmlLinkExtractor(allow=(r'/help/nl/',), deny=(other than /help/nl/), callback='parse_response') 
+0

Что URL/сайту вы ползаете? – Talvalin

+0

https://online.milieubarometer.nl/help/nl/ – nelsonvarela

+0

Какова ценность 'downloader/response_count' при запуске искателя (он будет показан в конце журнала), и вы могли бы отредактировать вопрос показать некоторые из страниц сканирования, которые вы хотите исключить? Я просто запустил код с вашим правилом и правилом akhter, и то же количество страниц было сканировано, и все они имели форму «./help/nl/». – Talvalin

ответ

0

попробовать это

class MySpider(CrawlSpider): 
    name = 'myspider' 
    allowed_domains = ['example.com', ] 
    start_urls = ['https://www.example.com/help/nl/', ] 
    rules = (
     Rule(SgmlLinkExtractor(allow=(r'/help/nl/',),deny=(r'/en/$',r'/website/$',)), callback='parse_response'), 
    ) 
+0

Я пробовал это, но scrapy все еще сканирует сайт enitre. – nelsonvarela

0

Мое решение было очень похоже на @akhter ответ. Однако я не использовал регулярное выражение.

я использовал:

deny=('/help', '/website') 

Он должен сделать так, чтобы он блокирует все, что имеет, что в URL (/ помощь/или веб-сайте)

Надеется, что это помогает

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