scrapy中pipeline组件常见作用,数据的清洗和入库

在scrapy的Item pipeline组件中有两个典型的作用,一个是查重并丢弃,第二个是将爬取的数据保存到文件或者数据库中。

以下为用scrapy爬取的豆瓣图书信息,数据清晰和去重都可以在Item Pipeline中完成

class DoubanBooksPipeline(object):
    def process_item(self, item, spider):
        author = item['author']
        if author:
            item['author'] = author.strip().replace('\n','').replace(' ','')
        series = item['series']
        if series:
            item['series'] = series.replace('\xa0','')
        content = item['content']
        if content:
            item['content'] = content.replace('\n','').replace(' ','')
        about_author = item['about_author']
        if about_author:
            item['about_author'] = about_author.replace('\n','').replace(' ','')
        publish_time = item['publish_time']
        if publish_time:
            item['publish_time'] = publish_time.split('-')[0]+'年'+publish_time.split('-')[1]+'月'
        return item

处理结束之后,需要将item返回,进行下一步的处理,即将数据保存在MongoDB中

class MongoPipeline(object):

    @classmethod
    def from_crawler(cls,crawler):
        cls.mongo_uri = crawler.settings.get('MONGO_URI','localhost:27017')
        cls.mongo_db = crawler.settings.get('MONGO_DB','scrapy_base_books_data')
        return cls()
        pass

    def process_item(self,item,spider):
        self.db['books'].insert(dict(item))
        return item
        pass

    def open_spider(self,spider):
        self.client = pymongo.MongoClient(self.mongo_uri)
        self.db = self.client[self.mongo_db]
        pass

    def close_spider(self,spider):
        self.client.close()

item的每一次处理过后都需要将item返回。

最后需要在settings中设置自己编写的Item Pipeline

 

ITEM_PIPELINES = {
   'douban_books.pipelines.DoubanBooksPipeline': 300,
   'douban_books.pipelines.MongoPipeline': 400,
}

这里的数字代表执行的先后顺序,item按数字从低到高的顺序通过Item Pipeline,通常在1-1000之间。

 

欢迎关注公众号:日常bug,每天写至少一篇技术文章,每天进步一点点。

你可能感兴趣的:(python爬虫)