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

2022-07-20 12:54:16 字數 1812 閱讀 6645

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 = ['']

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')

scrapy框架基於管道的持久化儲存

全棧資料的爬取 如何傳送post請求 yield scrapy.fromrequest url new url,callback self.parse,formdata 五大核心元件 物件 如何適當提公升scrapy爬取資料的效率 增加併發 預設scrapy開啟的併發執行緒為16個,可以適當進行增加...

Scrapy 資料持久化儲存

本文首發於我的部落格 gongyanli.com 前言 本文主要講解scrapy的資料持久化,主要包括儲存到資料庫 json檔案以及內建資料儲存 pipelins.py import json from scrapy.exceptions import dropitem class mypipeli...

Scrapy 框架(二)資料的持久化

scrapy資料的持久化 將資料儲存到資料庫 執行 scrapy genspider t crawl read www.dushu.com 檢視 read.pyclass readspider crawlspider 注 專案更改了預設模板,使其具有遞迴性 在 解析html內容的時候,可以根據鏈結規...