推荐了解:(12条消息) python代码创建数据库步骤_ljl_wuxinyu的博客-CSDN博客
参考:Scrapy进阶知识点总结(四)——Item Pipeline - fengf233 - 博客园 (cnblogs.com)
Item Pipeline的主要用途是:
清理HTML数据。
验证爬取数据,检查爬取字段。
查重并丢弃重复内容。
将爬取结果保存到数据库。
可以自定义管道类,但每个管道类必须实现以下方法:
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对象
from_crawler
方法呢?SQLitePipeline
类中定义 __init__
方法和from_crawler
方法,SQLite 是一种嵌入式数据库,它的连接和操作相对简单,不需要像其他数据库那样进行初始化或配置连接参数。from_crawler
方法中获取连接参数。open_spider()
方法中建立与 SQLite 数据库的连接即可。通过调用 sqlite3.connect()
方法,传递数据库文件的路径作为参数,即可建立与 SQLite 数据库的连接。1.打开scrapy项目的setting.py的文件末尾添加以下数据库连接信息
根据你的数据库类型和连接信息选择适当的配置。
# SQLite 数据库连接配置
SQL_DATABASE = 'database.db' # 数据库文件路径
# MySQL 数据库连接配置
MYSQL_HOST = 'localhost' # 主机名
MYSQL_PORT = 3306 # 端口号
MYSQL_USER = 'username' # 用户名
MYSQL_PASSWORD = 'password' # 密码
MYSQL_DATABASE = 'database' # 数据库名称
2.找到并激活ltem pipeline
去掉注释并将my.pipelines改为项目实际的类
在此设置中分配给类的整数值确定 运行顺序:项目从低值到高值 有价值的类。通常将这些数字定义为 0-1000 范围。
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