爬虫时出现的数据库写入异常问题/解决matplotlib制图无法显示中文的问题"/>
笔记:在调试爬虫时出现的数据库写入异常问题/解决matplotlib制图无法显示中文的问题
在调试爬虫时出现的数据库写入异常问题
本项目使用scrapy生成爬虫框架。
经分析可得,产生如上问题的主要原因可能为:
1.数据库连接异常,未正确连接到数据库;
2.数据爬取异常,没有获取到需写入的字段;
3.sql语法有误;
修改前的管道文件如下:
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: .html# useful for handling different item types with a single interface
import pymysqlclass QuotePipeline:# 初始化def __init__(self):#连接到MySQL数据库self.connect = pymysql.connect(# 主机名host='localhost',# 用户名user='root',# 密码password='123456',# 数据库database='quotes',# 数据库编码charset='utf8',)self.cursor = self.connect.cursor()# 处理每一条数据def process_item(self, item, spider):item = dict(item)# 数据表名table = 'quote'# 字段的名称keys = ','.join(item.keys())# 字段的值values = ','.join(['%s'] * len(item))# 构造SQL语句sql = 'insert into {table}({keys}) values({values})'.format(table=table, keys=keys, values=values)try:# 执行SQL语句if self.cursor.execute(sql, tuple(item.values())):self.connectmit()print("succeed!")except:print("Failed!")self.connect.rollback()return item# 关闭爬虫def close_spider(self, spider):# 关闭cursorself.cursor.close()# 关闭连接self.connect.close()
经过检查代码,确定spiders无误,可通过确定的Xpath爬取到数据;接着检查init方法,确定数据库参数无误,基本可以确定问题出现在sql语句上。
接着检查控制台信息:
不难看出程序在执行 self.cursor.execute() 方法时抛出了异常 “Failed” ,并且经过对 commit() 方法的测试,可以看出 commit() 提交的内容为 None, 进一步查看 self.cursor.execute() 方法,发现控制台报出了sql语法错误:
此时检查数据库版本:本次项目使用 MySQL 5.0.45
而 MySQL 5 是不支持类似
insert into table(keys) values(values)
的操作的。
修改后的管道文件:
sql = 'insert into {table} values({values})'.format(table=table, values=values)
此时检查数据库表:
成功写入了数据。
解决matplotlib制图无法显示中文的问题
1.第一种方法:
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['KaiTi']
mpl.rcParams['font.serif'] = ['KaiTi']
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题,或者转换负号为字符串
2.第二种方法:使用本地文字库文件,或下载后使用绝对路径引用。
更多推荐
笔记:在调试爬虫时出现的数据库写入异常问题/解决matplotlib制图无法显示中文的问题
发布评论