How to get the pipeline object in Scrapy spider

后端 未结 2 1554
隐瞒了意图╮
隐瞒了意图╮ 2021-01-13 05:02

I have use the mongodb to store the data of the crawl.

Now I want to query the last date of the data, that I can continue crawl the data and not ne

相关标签:
2条回答
  • 2021-01-13 05:50

    According to the scrapy Architecture Overview:

    The Item Pipeline is responsible for processing the items once they have been extracted (or scraped) by the spiders.

    Basically that means that, first, scrapy spiders are working, then extracted items are going to the pipelines - no way to go backwards.

    One possible solution would be, in the pipeline itself, check if the Item you've scraped is already in the database.

    Another workaround would be to keep the list of urls you've crawled in the database, and, in the spider, check if you've already got the data from a url.

    Since I'm not sure what do you mean by "start from the beginning" - I cannot suggest anything specific.

    Hope at least this information helped.

    0 讨论(0)
  • 2021-01-13 06:04

    A Scrapy Pipeline has an open_spider method that gets executed after the spider is initialized. You can pass a reference to the database connection, the get_date() method, or the Pipeline itself, to your spider. An example of the latter with your code is:

    # This is my Pipline
    class MongoDBPipeline(object):
        def __init__(self, mongodb_db=None, mongodb_collection=None):
            self.connection = pymongo.Connection(settings['MONGODB_SERVER'], settings['MONGODB_PORT'])
            ....
    
        def process_item(self, item, spider):
            ....
        def get_date(self):
            ....
    
        def open_spider(self, spider):
            spider.myPipeline = self
    

    Then, in the spider:

    class Spider(Spider):
        name = "test"
    
        def __init__(self):
            self.myPipeline = None
    
        def parse(self, response):
            self.myPipeline.get_date()
    

    I don't think the __init__() method is necessary here, but I put it here to show that open_spider replaces it after initialization.

    0 讨论(0)
提交回复
热议问题