Scrapy框架 基於管道 儲存資料到本地檔案流程、案例
阿新 • • 發佈:2018-11-17
流程思路
- 將解析資料存到
items物件
- 使用
yield
將items交給管道檔案處理 - 在管道檔案
pipelines編寫程式碼儲存
- 在
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