2013-10-21 2 views
0

SgmlLinkExtractor 규칙에서/static/및/otherstuff/사이에 제한된 수의 디렉토리 (예 : 3) 만 허용 할 수 있습니까? 아래 예제에서 EX1은 크롤링되지 않습니다 (/ static /와/otherstuff/사이에 4 개의 디렉토리가 있기 때문에). EX2가됩니다.치료 - 중간 디렉토리 제한 (파이썬)

EX1 : http://www.domain.com/static/d1/d2/d3/d4/otherstuff/otherstuff2/bunchacrap
EX2 :

http:///www.domain.com/static/d1/d2/otherstuff/otherstuff2/bunchacrap는 가정/정적 /과/otherstuff/내가 원하는 디렉토리의 양쪽에 항상.

도움이 필요하시면 TON에 감사드립니다.

답변

1

allow 매개 변수의 정규식이나 process_value 매개 변수의 테스트 함수를 사용할 수 있습니다. (docs을 참조하십시오.)

두 가지 모두 장단점이 있으므로 페이지의 링크 모양이 다릅니다. 정규식을 사용하는 경우 정규화 된 URL (예 : http://domain.com/foo/bar)을 테스트합니다. process_value 매개 변수를 사용하면 웹 페이지에있는 원시 값 (즉,/foo/bar 또는 그보다 더 나쁜 상대 링크)이 표시됩니다.

예를 들어, 정규식을 사용하면 process_value 갈 경우,이 같은 기능은 위의

def filter_path(value): 
    # at least 2, at most 3 /'s 
    if 1 < value.count('/') < 4: 
     return value 

기능을 작동 할

domain.com/foo/bar 
domain.com/foo/bar/foo 
domain.com/foo/bar/foo/bar 

하지만

domain.com/foo/ 
domain.com/foo/bar/foo/bar/foo 

일치 domain.com/(?:\w+/){1,3}\w+$ 귀하의 html 링크가과 같은 href 값을 가지고 있다고 가정합니다., /foo/bar/foo, 특정 경우 등

, 정규식은 domain.com/static/(?:\w+/){3}otherstuff 같은 것, 그리고 filter_path 기능은 value.startswith('/static/')와 접미사를 확인할 수 있습니다. 당신이 CrawlSpiderRule 클래스를 사용하는 경우

세 번째 옵션이 있습니다. process_links 매개 변수를 사용하면 링크 목록을 처리하는 함수를 전달할 수 있습니다. 예를 들어

+0

내 담당자와 업보트 할 수는 없지만 놀라운 점은 대안을 찾아 주셔서 감사합니다. 나는 실제로이 과정을 재판으로 배우기 위해 사용하고 있으므로 대안을 통해 나에게 1 톤을 가르쳤습니다. 나는 특히'process_links'와'url_allowed' 매개 변수를 시험해보고 싶습니다! – Xodarap777