网页数据存储mysql数据库过程问题及解决

#coding:utf-8
from bs4 import BeautifulSoup
import pymysql
import sqlite3
import sys
import importlib

importlib.reload(sys)

html = """




"""

soup = BeautifulSoup(html,'html.parser')
list = soup.find_all('a')
conn = pymysql.connect('localhost','zoe','1235789y','tianyadb',charset='utf8')
cursor = conn.cursor()
for l in list:
    try:
        print('there')
        sql = "insert into citys(city,c_url) values(%s,%s)"
        print(sql)
        cursor.execute(sql,(str(l.string),str('http://bbs.tianya.cn'+l['href']).encode('utf8')))
        print('ok')
        conn.commit()        
        
    except pymysql.Error as e:
        print('************error:',e)
        conn.rollback()
cursor.close()
conn.close()

以上为源代码

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

其中遇到的问题

1:中文编码问题

分为4步:1.Python文件设置编码(文件前面加上 #encoding=utf-8)

                   2.设置数据库编码为utf-8,(charset=utf-8)

                   3.Python连接mysql数据库时加上参数charset=‘utf8’

                   4.设置python的默认编码是utf8(sys.setdefaultencoding(utf-8))

                     注:Python3中取消了这种写法,改用import importlib  importlib.reload(sys)

2.insert语句变量插入

在sql语句中将占位符标好,然后cursor.execute()中将变量当做参数加入。(这种方式安全,使用Python字符串传参的方法后面加%,有sql注入的危险)

sql = "insert into citys(city,c_url) values(%s,%s)"
print(sql)
cursor.execute(sql,(str(l.string),str('http://bbs.tianya.cn'+l['href']).encode('utf8')))

3.错误异常处理


4.游标指针cursor的位置问题


你可能感兴趣的:(python)