2017-10-21 27 views
0

私は掻き集めるURLの数をSitemapSpiderに取得しようとしています。私はstart_requestsメソッドをオーバーライドしようとしましたが、それは0を出力します。私は何千ものURLを含むsitemap_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の長さを数えます。私はサイトマップで見つかったURLの数を取得したい。出来ますか? –

+1

可能ですが、まっすぐではありません。問題は、クラス内の '_parse_sitemap'によって処理されるサイトマップのURLをすべてダウンロードする必要があることです。ですから、それは可能ですが、まともな改造をしています。 'start_requests'メソッドでurlごとにレスポンスオブジェクトを作成し、' _parse_sitemap'を通してそれらを渡し、それらのジェネレータからリストを取得する必要があります。 –

関連する問題