1. 程式人生 > 實用技巧 >scrapy 基於管道的持久化儲存操作

scrapy 基於管道的持久化儲存操作

scrapy框架中已經為我們專門整合好了高效、便捷的持久化操作功能,我們直接使用即可。
這兩個元件配合爬蟲檔案實現資料持久化

items.py:資料結構模板檔案。定義資料屬性。
pipelines.py:管道檔案。接收資料(items),進行持久化操作。

持久化流程:

1.爬蟲檔案爬取到資料後,需要將資料封裝到items物件中。
2.使用yield關鍵字將items物件返回,自動提交給pipelines管道進行持久化操作。
3.在管道檔案中的process_item方法中接收爬蟲檔案提交過來的item物件,然後編寫持久化儲存的程式碼將item物件中儲存的資料進行持久化儲存
4.settings.py配置檔案中開啟管道

爬蟲檔案(qiushi.py)

import scrapy
from learn_scrapy.items import LearnScrapyItem   # 匯入items

class QiushiSpider(scrapy.Spider):
    name = 'qiushi'
    # allowed_domains = ['www.web.com']
    start_urls = ['https://www.qiushibaike.com/']

    def parse(self, response):
        li_list = response.xpath('//*[@id="content"]/div/div[2]/div/ul/li')
        for li in li_list:
            title = li.xpath('./div/a/text()')[0].extract()
            author = li.xpath('./div/div/a/span/text()')[0].extract()

            item = LearnScrapyItem()
            # 將資料封裝到items物件中。
            item['title'] = title
            item['author'] = author
            # 使用yield關鍵字將items物件返回
            yield item

資料結構模板檔案,定義資料屬性(items.py)

import scrapy


class LearnScrapyItem(scrapy.Item):
    author = scrapy.Field()
    title = scrapy.Field()

管道檔案(pipelines.py)

from itemadapter import ItemAdapter


class LearnScrapyPipeline:
    def __init__(self):
        self.fp = None

    """
        下列都是在重寫父類方法
    """
    #開始爬蟲時,執行一次
    def open_spider(self, spider):
        print('start spider')
        self.fp = open('data.txt', 'w')

    # 在爬蟲執行中會頻繁呼叫
    def process_item(self, item, spider):
        self.fp.write(item['author'] + ':' + item['title'] + '\n')
        return item

    #結束爬蟲時,執行一次
    def close_spider(self, spider):
        self.fp.close()
        print('spider end')