scrapy 基於管道的持久化儲存操作
阿新 • • 發佈:2020-07-27
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')