scrapy连接sql数据库

推荐了解:(12条消息) python代码创建数据库步骤_ljl_wuxinyu的博客-CSDN博客

参考:Scrapy进阶知识点总结(四)——Item Pipeline - fengf233 - 博客园 (cnblogs.com)

Item Pipeline的主要用途是:

  • 清理HTML数据。

  • 验证爬取数据,检查爬取字段。

  • 查重并丢弃重复内容。

  • 将爬取结果保存到数据库。

Pipeline类#

可以自定义管道类,但每个管道类必须实现以下方法:

process_item(self, item, spider)

process_item()是必须要实现的方法,被定义的Item Pipeline会默认调用这个方法对Item进行处理。比如,我们可以进行数据处理或者将数据写入到数据库等操作。它必须返回Item类型的值或者抛出一个DropItem异常。

参数:

  • item,是Item对象,即被处理的Item。

  • spider,是Spider对象,即生成该Item的Spider。

管道类还有其它的方法可选择性实现:

1.open_spider(spider)

在Spider开启时被调用,主要做一些初始化操作,如连接数据库等。参数是即被开启的Spider对象

2.close_spider(spider)

在Spider关闭时被调用,主要做一些如关闭数据库连接等收尾性质的工作。参数spider就是被关闭的Spider对象

在sqlite需不需要init方法和from_crawler 方法呢?

  • 使用 SQLite 数据库时,不需要在 SQLitePipeline 类中定义 __init__ 方法和from_crawler 方法,SQLite 是一种嵌入式数据库,它的连接和操作相对简单,不需要像其他数据库那样进行初始化或配置连接参数。
  • 这在连接其他数据库(如 MySQL、PostgreSQL 等)时可能是必要的,因为这些数据库可能需要额外的配置参数来建立连接,例如主机、端口、用户名、密码等。
  • 相比之下,SQLite 数据库通常以文件形式存储在本地,不需要额外的配置参数。连接 SQLite 数据库在指定数据库文件的路径即可,因此不需要在 from_crawler 方法中获取连接参数。
  • 只需要在 open_spider() 方法中建立与 SQLite 数据库的连接即可。通过调用 sqlite3.connect() 方法,传递数据库文件的路径作为参数,即可建立与 SQLite 数据库的连接。

修改setting.py

 1.打开scrapy项目的setting.py的文件末尾添加以下数据库连接信息

根据你的数据库类型和连接信息选择适当的配置。

  • 使用 SQLite 数据库,只需提供数据库文件路径;
# SQLite 数据库连接配置
SQL_DATABASE = 'database.db'  # 数据库文件路径
  • 使用 MySQL 数据库,需要提供主机名、端口号、用户名、密码和数据库名称。
# MySQL 数据库连接配置
MYSQL_HOST = 'localhost'  # 主机名
MYSQL_PORT = 3306  # 端口号
MYSQL_USER = 'username'  # 用户名
MYSQL_PASSWORD = 'password'  # 密码
MYSQL_DATABASE = 'database'  # 数据库名称

2.找到并激活ltem pipeline

scrapy连接sql数据库_第1张图片

 去掉注释并将my.pipelines改为项目实际的类

在此设置中分配给类的整数值确定 运行顺序:项目从低值到高值 有价值的类。通常将这些数字定义为 0-1000 范围。

scrapy连接sql数据库_第2张图片

修改pipelines.py

1. 导入sqlite模块

2. 创建类,继承object或者BaseItemPipeline,编写好连接数据库sql的模板

import splite3    #导入spilite3
#定义数据库sqllite类
class SQLitePipeline(object):
#连接数据库
    def open_spider(self, spider):
        pass
#关闭数据库
    def close_spider(self, spider):
        pass
#接收数据
    def process_item(self, item, spider):
        pass

3. 根据以上模板,连接数据库,插入数据,关闭数据库

import sqlite
 #定义sqlite类
class SQLlitePipeline(object):

#连接数据库
    def open_spider(self, spider):
        self.conn = sqlite3.connect('tutor.db')         #打开或者创建数据库,库名在括号里
        self.cursor = self.conn.cursor()                 #获取游标
        # 创建表格
        self.cursor.execute('''
               CREATE TABLE IF NOT EXISTS scrapy_item (
                   id INTEGER PRIMARY KEY AUTOINCREMENT,
                   text TEXT,
                   type TEXT) ''')
#关闭数据库
    def close_spider(self, spider):
        self.conn.close()  # 关闭数据库
#接收数据
    def process_item(self, item, spider):
        #提取item数据
        text = str(item['text'])
        print('pipelines here, text',text)        #验证是否执行了
        type = str(item['type'])
        self.cursor.execute('''INSERT INTO scrapy_item(text, type) VALUES (?, ?)''', (text, type))
        #(text, type)是一个元组,包含了要填入占位符的实际值。通过将实际值作为元组传递给execute方法的第二个参数,可以将这些值正确地填入到SQL语句的占位符中。
        self.conn.commit()                               #提交数据库操作
        return item

你可能感兴趣的:(数据库,python,sqlite)