Scrapy item数据存储到mysql

以下操作是在window环境下进行的

1.下载mysql 的驱动
	pip install mysqlclient
2.新建pipelineItem 类
class MysqlPipelineItem(object):
	
	def __init__(self):
		pass
		
	def process_item(self,item,spider):
		pass
	
	def  close_spider(self):
		pass

3数据库连接
  1. 导入模块 import MySQLdb
  2. 数据库连接
    MySQLdb.connect(*base,**kw)
    base是一个可变的列表(主要是数据库的连接信息),需要有序
  • host // 主机ip
  • username //用户名
  • password //密码
  • dbname //数据库名称
  • dbalias //数据库别名
  • port //端口号

kw 是可变参数的字典类型提供数据库连接的额外信息

  • charset: 字符集,中午你环境一般设为utf8
  • use_unicode: bool值
self.__conn = MySQldb.connect('127.0.0.1', 'root', '111111', 'scrapy', 'scrapy', '3306',**{use_unicode = True,charset='utf8'})
self.__cursor = self.__conn.cursor() #获取cursor
执行sql语句
	# sql 中可以使用占位符,占位符内容的填充需要放在第二个参数 tuple_argument 中
	self.__cursor.execute(sql,tuple_argument)
	self.__conn.commit()
配置ITEM_PIPELINES

在settings.py文件下找到ITEM_PIPELINES,添加自定义的pipeline

ITEM_PIPELINES = {
#  'pipeline_class_path': priority(数值越小优先级越高,范围1~1000)
}
完整的代码
import MySQLdb
class MysqlPipelineItem(object):
	
	def __init__(self):
		self.__conn = MySQLdb.connect('127.0.0.1', 'root', 'root', 'scrapy',**{use_unicode=True, charset = 'utf8'})
		self.__cursor = self.__conn.cursor()
		
	def process_item(self,item,spider):
		sql = '''insert into article(title,url, image_url,create_time,content)   values (%s, %s, %s, %s, %s)
		'''
		sql.__cursor.execute(sql,(item['title'],item['url'],item['image_url'],item['create_time'],item['content']))
		self.__conn.commit()
		return item
	
	def  close_spider(self):
		self.__cursor.close()
		self.__conn.close()


出现过的问题:
  1. TypeError: not all arguments converted during string formatting
    就是sql语句的占位符个数和实际提供参数值个数不同
  2. _mysql_exceptions.OperationalError: (1241, ‘Operand should contain 1 column(s)’)
    我出现这个异常的原因是,我传入的参数值是列表,我将列表转为字符串就好了(“”.join(item[‘content’]))。还有可能有别的原因会导致这个异常,有知道的朋友欢迎留言
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值