2017-06-16 27 views
0

sitemapcrawlerでルールを使用することはできますか? httpsの代わりにhttpリンクを持つ古いサイトマップを持つサイトがいくつかあります。私がそれらをクロールするたびに、すべてのリンクがリダイレクトされ(301)、その(および私)側で無駄なトラフィックが発生します。最も簡単な解決策は、リンクがクロールされる前に処理して、httpからhttpsにスキームを変更することだと思いました。クロールする前にscrapyのsitemapcrawlerが処理するリンク

私はルールでそれを行うことができますか、または単にデフォルトのミドルウェアを使用して、基本的にすべてのURLを基本的に2回解析できるようにすることはできますか?リダイレクトを無視することは解決策になるかもしれませんが、私はそれを「もっと汚い」と感じています。

答えて

0

ルールsitemapcrawlerには属性があります。

参照: https://doc.scrapy.org/en/latest/topics/spiders.html#scrapy.spiders.SitemapSpider.sitemap_rules

あなたは非HTTPSのURLをフィルタリングします正規表現を追加することができます。

+0

実際に私はルールは何が必要ですかわかりません。私はそれらが私が必要としているものではないページをダウンロードした後に適用されると思います。 – maugch

+0

クロールされたウェブサイトのサイトマップに他のサイトマップが含まれている場合があります。私は "sitemap_follow" regexpを使ってどのサイトマップURLに "sitemap_rules" regexpと組み合わせて、どのリンクのみを指定するかを定義しています。実行中のクローラは正常に機能しますが、クローラは指定されたURLのみを処理します。 –

+0

クロールする前にsitemap_rulesが適用されていることを確認してください。私はあなたが望んでいないものを捨てるだけで、私が期待していることは本当にしないと思った。私はおそらく – maugch

0

あなたはそれをSitemapSpider、以下の例の実装を確認し、SitemapSpiderの_parse_sitemapを上書きしようとすることができます:

def _parse_sitemap(self, response): 
    sitemap_generator = super(MySitemapSpider, self)._parse_sitemap(response) 
    if sitemap_generator is None: 
     return 

    for response_url in sitemap_generator: 
     import pdb;pdb.set_trace() 
     # do something with the URL 
     yield response_url 
関連する問題