Tôi không thể thay đổi cài đặt spider theo phương pháp phân tích cú pháp. Nhưng nó chắc chắn phải là một cách.Phế liệu. Làm thế nào để thay đổi cài đặt nhện sau khi bắt đầu thu thập thông tin?
Ví dụ:
class SomeSpider(BaseSpider): name = 'mySpider' allowed_domains = ['example.com'] start_urls = ['http://example.com'] settings.overrides['ITEM_PIPELINES'] = ['myproject.pipelines.FirstPipeline'] print settings['ITEM_PIPELINES'][0] #printed 'myproject.pipelines.FirstPipeline' def parse(self, response): #...some code settings.overrides['ITEM_PIPELINES'] = ['myproject.pipelines.SecondPipeline'] print settings['ITEM_PIPELINES'][0] # printed 'myproject.pipelines.SecondPipeline' item = Myitem() item['mame'] = 'Name for SecondPipeline'
Nhưng! Mục sẽ được xử lý bởi FirstPipeline. Thông số ITEM_PIPELINES mới không hoạt động. Làm cách nào để thay đổi cài đặt sau khi bắt đầu thu thập thông tin? Cảm ơn trước!
Đường ống được khởi tạo và kích hoạt khi khởi động động cơ. Tôi không chắc chắn nếu bạn có thể thay đổi điều này trong khi thực hiện. Tuy nhiên, bạn có thể kích hoạt cả hai đường ống lúc bắt đầu và thêm một số logic vào đường ống mà sẽ chỉ xử lý một mục nếu nó đáp ứng một điều kiện nhất định. –
Vâng, đây là lựa chọn cuối cùng của tôi. Cảm ơn bạn đã trả lời. Tôi nghĩ rằng một cái gì đó giống như tín hiệu nhện có thể giúp đỡ, nhưng nó là khá diffcult. – fcmax
Để chắc chắn, bạn có thể gắn các chức năng khác nhau vào các tín hiệu nhện khác nhau. Bạn muốn gắn các trình xử lý vào các tín hiệu trong một phần mở rộng tho. Xem thêm: http://doc.scrapy.org/en/latest/topics/extensions.html#writing-your-own-extension –