从网页爬取数据,将爬取数据插入数据库的时候报错,报错截图如下:
问题描述
报错提示插入数据的时候出错,仔细检查插入数据之后,发现有两个值是字典类型
原因分析:
个人觉的原因是数据库中该字段的值是varchar类型,所以字典类型的数据不能存进去
解决方案:
将这两个字典项删掉
程序代码
del temp_dict['backFlowInfoInfoDTO']
del temp_dict['dataApplyPrompt']
主程序
import datetime
import json
import MySQLdb
import pandas as pd
import requests
import urllib3
starttime = datetime.datetime.now()
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
url = 'xxxxxxx'
cookies = 'xxxxxxxx'
jsonParam = {xxxxx}
headers = {xxxxxx}
response = requests.post(url, data=json.dumps(jsonParam), headers=headers)
res = response.json()
list = res['data']['list']
n = len(list)
# 创建数据库连接
conn = MySQLdb.connect(host='xxxxxx', user='xxxx', passwd='xxxx', db='xxxx', port=xxxx,
charset='utf8')
# 创建数据库游标对象cursor
cur = conn.cursor()
# cur.execute("truncate table your_table_name;")
# 将数据信息插入数据库
for i in range(n):
temp_dict = list[i]
del temp_dict['backFlowInfoInfoDTO']
del temp_dict['dataApplyPrompt']
table = "your_table_name"
keys = ','.join(temp_dict.keys()) # 列字段
values = ','.join(['%s'] * len(temp_dict)) # 行字段
sql = 'insert into {table} ({keys}) values ({values})'.format(table=table, keys=keys, values=values)
# print(sql)
cur.execute(sql, tuple(temp_dict.values()))
conn.commit()
print("第" + str(i + 1) + "次插入成功")
cur.close()
conn.close()
endtime = datetime.datetime.now()
print("程序运行时间:")
print(endtime - starttime)