基于scrapy模板的可持久化存储

本文介绍了如何在Scrapy爬虫项目中使用自定义Pipeline来存储数据到MySQL数据库,处理图片并保存到本地,以及将数据导出为CSV和TXT文件。首先,创建数据库连接并在Pipeline中处理条目。接着,展示如何存储图片,定义了ImagesPipeline的子类。最后,展示了如何将数据写入CSV和TXT文件,分别使用不同的Pipeline实现。
摘要由CSDN通过智能技术生成

存储到mysql中

首先我们需要在mysql中创建好对应的数据库以及表

之后在Pipeline中创建好类

import pymysql

class mysqlPipeLine(object):
    # 数据库连接
    conn = None
    cursor = None

    def open_spider(self, spider):
        self.conn = pymysql.Connect(host='127.0.0.1', port=3306, user='root', password='', db='指定数据库', charset='utf8')

    def process_item(self, item, spider):
        self.cursor = self.conn.cursor()

        try:
            self.cursor.execute(执行sql语句)
            self.conn.commit()
            print('成功插入', 某某, '的工作信息到数据库中!')
        except Exception as e:
            print(e)
            self.conn.rollback()

        return item

    def close_spider(self, spider):
        if self.cursor:
            self.cursor.close()
        if self.conn:
            self.conn.close()

存储照片

我们在Pipeline中定义如下类

from scrapy.pipelines.images import ImagesPipeline

class imgsPipeLine(ImagesPipeline):

    # 根据图片地址进行图片数据的请求
    def get_media_requests(self, item, info):
        yield scrapy.Request(item['img_src'])

    # 指定图片存储的路径
    def file_path(self, request, response=None, info=None, *, item):
        imgName = item['img_name']
        return imgName

    def item_completed(self, results, item, info):
        return item  # 返回给下一个即将被执行的管道类

在setting中添加如下信息

# 指定图片存储的目录
IMAGES_STORE = './img_lib'

存储为csv文件类型

class CSVPipeline(object):
    def open_spider(self, spider):
        print('开始存储!')
        self.f = open('./fileName.csv', mode='w', encoding='utf-8')

    def close_spider(self, spider):
        print('存储完毕!')
        if self.f:
            self.f.close()

    def process_item(self, item, spider):
        self.f.write(f"{item['xxx']},{(item['xx'])},{item['xx']},...,\n")
        return item

存储为txt文件

class TXTPipeline(object):
    fp = None

    # 重写父类的一个方法:该方法只在开始爬虫的时候被调用一次
    def open_spider(self, spider):
        print('开始爬虫!')
        self.fp = open('./fileName.txt', 'w', encoding='utf-8')

    def process_item(self, item, spider):
        xx = item['xx']
        xxx = item['xxx']
        # 持久化存储
        self.fp.write(xx + ':' + xxx + '\n') 

        return item  # 就会传递给下一个即将被执行的管道类

    # 重写父类
    def close_spider(self, spider):
        print('结束爬虫!')
        self.fp.close()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dxxmsl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值