2014-06-16 3 views
1

는 현재 Sgmllinkextractor 내 규칙은 다음과 같습니다 : Scrapy SgmlLinkExtractor 정지 후 10 페이지

 rules = (Rule (SgmlLinkExtractor(allow=("/boards/recentnews.aspx",),restrict_xpaths=  ('//*[text()[contains(.,"Next")]]')) 
     , callback="parse_start_url", follow= True), 
     ) 

내가 scrapy 그것은 10 페이지에 도달 한 후 크롤링을 중지하려면, 그래서 그것을 이런 식으로 뭔가 될 것이라고 생각 :

 rules = (Rule (SgmlLinkExtractor(allow=("/boards/recentnews.aspx?page=\d*",),restrict_xpaths=  ('//*[text()[contains(.,"Next")]]')) 
     , callback="parse_start_url", follow= True), 
     ) 

하지만 어떻게해야할지 모르겠다. 규칙은 1-10에 적용됩니다.

답변

0

당신은 콜백에서 작업을 수행 할 수 있습니다

def parse_start_url(response): 
    page_number = int(re.search('page=(\d+)', response.url).group(1)) 
    if page_number > 10: 
     raise CloseSpider('page number limit exceeded') 
    # scrape the data 

여기에 정규 표현식을 포함하는 행이하는 작업은 다음과 같습니다

>>> import re 
>>> url = "http://example.com/boards/recentnews.aspx?page=9" 
>>> re.search('page=(\d+)', url).group(1) 
'9' 
>>> url = "http://example.com/boards/recentnews.aspx?page=10" 
>>> re.search('page=(\d+)', url).group(1) 
'10' 
+0

감사 규칙에 포함 할 수있는 방법이있을 것이라고 생각했다. – rmehta1987