私はCrawlSpiderを実行していますが、実行中のリンクのいくつかに続いて、process_request
に関数を渡すことで、いくつかのロジックを実装したいと考えています。Scrapy CrawlSpiderにインスタンス変数を追加する方法は?
この関数は、リンクが削除または処理され続けます現在の状態を追跡するためにクモのクラス変数を使用し、それに応じて(とリファラURL上):
class BroadCrawlSpider(CrawlSpider):
name = 'bitsy'
start_urls = ['http://scrapy.org']
foo = 5
rules = (
Rule(LinkExtractor(), callback='parse_item', process_request='filter_requests', follow=True),
)
def parse_item(self, response):
<some code>
def filter_requests(self, request):
if self.foo == 6 and request.headers.get('Referer', None) == someval:
raise IgnoreRequest("Ignored request: bla %s" % request)
return request
私は、同じマシン上で複数のスパイダーを走らせると、同じ意図を持たない同じクラスの変数を使用すると思います。
インスタンスの変数をCrawlSpidersに追加する方法はありますか? Scrapyを実行すると、スパイダーのインスタンスは1つだけ作成されますか?
私はおそらくプロセスIDごとの値で辞書でそれを回避することができ、それは醜いになります...
ありがとうございました!私は可読性のために '__init__'を使うことを好むと思います。そうでなければ、これらの変数がどこから来ているのか理解できません。しかし、いったんこれを行うと、スパイダーに引数を渡すのをスキップして、インスタンス変数を '__init__ '内に設定するという単純な設定を使用するだけです。これは私がやることです。再度、感謝します! – UriCS