2017-10-21 3 views
0

SitemapSpider에서 긁어 모으는 URL 수를 얻으려고합니다. 나는 start_requests 방법을 오버라이드하려했지만 그것은 0을 출력합니다. 나는 sitemap_url에 수천 개의 URL을 포함하고 있습니다. 나는이 URL의 수를 얻고 싶다.거미에게서 URL을 얻을 수 없다 (치료)

이것은 내가 시도한 것이지만 사이트 맵의 URL은 start_urls에 없다고 가정합니다.

class MainSpider(SitemapSpider): 
    name = 'main_spider' 
    allowed_domains = ['...'] 
    sitemap_urls = ['http://.../sitemap.xml'] 

    def start_requests(self): 
     r = super(MainSpider, self).start_requests() 
     self.urls_count = len(self.start_urls) 
     print self.urls_count 
     return r 

번호를받는 방법을 알고 계십니까?

답변

0

아래에서 사용하실 수 있습니다. super(MainSpider, self).start_requests()

class MainSpider(SitemapSpider): 
    name = 'main_spider' 
    allowed_domains = ['...'] 
    sitemap_urls = ['http://.../sitemap.xml'] 

    def start_requests(self): 
     r = super(MainSpider, self).start_requests() 
     r_list = list(r) 
     print len(r_list) 
     return r_list 

는 발전기 및 목록은 당신이 만든 전체 수율을 얻을 수 있는지 확인합니다 반환합니다. 그러나 이렇게하면 대형 사이트 맵의 경우 스크래퍼 시작 속도가 느려집니다. 실제 치료는 지연으로 시작될 수 있습니다.

+0

이것은 sitemap_urls의 길이를 계산합니다. Sitemap에서 발견 된 URL 수를 얻고 싶습니다. 가능한가? –

+1

가능하지만 앞으로 나아갈 수는 없습니다. 문제는 클래스에서'_parse_sitemap'에 의해 처리 될 모든 사이트 맵 URL을 다운로드해야한다는 것입니다. 그래서 괜찮은 수정이 가능합니다. 'start_requests' 메소드에서 각 URL에 대한 응답 객체를 생성 한 다음'_parse_sitemap'을 통해 전달하고 생성자로부터 목록을 가져와야합니다. –

관련 문제