1. 程式人生 > >Scrapy框架 基於管道 儲存資料到本地檔案流程、案例

Scrapy框架 基於管道 儲存資料到本地檔案流程、案例

流程思路

  1. 將解析資料存到items物件
  2. 使用yield 將items交給管道檔案處理
  3. 在管道檔案pipelines編寫程式碼儲存
  4. setting配置檔案開啟管道

案例

setting.py配置檔案

  • 取消註釋,數字為優先順序
ITEM_PIPELINES = {
   'qiubaiPro.pipelines.QiubaiproPipeline': 300,  # 300優先順序
}

爬蟲檔案

  • 必須匯入items 中的類
  • 將資料錄入item
  • 用yield item提交給管道
import
scrapy from qiubaiPro.items import QiubaiproItem class QiubaiSpider(scrapy.Spider): name = 'qiubai' # allowed_domains = ['qiushibaike.com/text'] # 圖片可能不是該域名下 start_urls = ['https://www.qiushibaike.com/text/'] # https 要注意 def parse(self, response): # 取段子列表 div_list = response.
xpath("//div[@id='content-left']/div") # 儲存解析到的頁面資料 data_list = [] for div in div_list: # xpath解析的內容儲存到 selector物件中,獲取內容.extract() # extract_first()獲取內容 = .extract()[0] author = div.xpath("./div/a[2]/h2/text()").extract()[0] # 或extract_first() content =
div.xpath(".//div[@class='content']/span/text()").extract_first() # 1.資料解析到items物件(先匯入) item = QiubaiproItem() item['author'] = author item['content'] = content # 2.將item物件提交給管道 yield item

itmes.py

  • 把欄位按語法註冊
class QiubaiproItem(scrapy.Item):
    # 語法:  欄位 = scrapy.Field()
    author = scrapy.Field()
    content = scrapy.Field()

管道檔案pipelines.py

  • open_spide 開始時執行
  • close_spider結束執行
class QiubaiproPipeline(object):
    fp = None

    # 爬蟲過程開始執行1次,用來開啟檔案
    def open_spider(self, spider):
        print('爬蟲開始')
        self.fp = open('./qiubai_pipe.txt', 'w', encoding='utf-8')

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

    # 對提交的item物件,進行儲存
    # 爬蟲每次提交item,該方法被執行一次
    def process_item(self, item, spider):
        # 1. 取出資料
        author = item['author']
        content = item['content']

        # 2. 儲存
        self.fp.write(author + content + '\n\n\n')
        return item