今天测试了一下用python爬数据传到MySQL上,我真的差点儿哇的哭出来了,天哪,弄了一天,它一直有一个错误,就是我传数据到MySQL上,只有自增列在增加,其他列全为null,(其他列都是中文),然后弄了半天编码格式,最后发现是SQL问题(在此之前我非常坚定我SQL没有问题的,因为拿到Navicat执行是可以执行的,只能说在python里写的传入数据的sql有一个地方需要非常注意)
我错误的添加数据的sql:
insert into foods(num,food_name,food_calorie,food_url)values(null,food_name,food_calorie,food_url)
value这里的food_name等是我爬网页获取的数据,是字符串类型,所以我直接那样写的
还有这里的num是自增列,自增列可以赋值为null
后来发现自增列可以不写!
insert into foods(food_name,food_calorie,food_url)values(food_name,food_calorie,food_url)
但这个代码还是有问题的!
正确的:(需要把插入数据和传入的值分开写!!)
insert into foods(food_name,food_calorie,food_url) values(%s,%s,%s)
value=(food_name,food_calorie,food_url)
还有一个地方,不管表里的数据类型是什么在insert into 那一行里的value 里面都写%S
只要下面的value括号里面的类型能跟表里的字段类型对应起来即可!!
完整的代码:
import pymysql
import time
import requests
from bs4 import BeautifulSoup
host='localhost'
user='root'
password='123456'
database='spider_test_bak'
try:
db=pymysql.connect(host,user,password,database)
print('数据库连接成功')
time.sleep(1)
#创建游标
cursor=db.cursor()
print('下面开始爬取网页数据')
url = 'http://www.boohee.com/food/group/1'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'
}
print('请求网页信息')
res = requests.get(url, headers=headers)
print('爬取状态:%s'%(res.status_code))
soup = BeautifulSoup(res.text, 'html.parser')
foods = soup.find_all('li', class_='item clearfix')
time.sleep(1)
for food in foods:
food_name = food.find_all('a')[1]['title']
food_calorie = food.find('p').text
food_url = ('http://www.boohee.com/' + food.find('a')['href'])
sql='insert into foods(food_name,food_calorie,food_url)value(%s,%s,%s)'
value=(food_name,food_calorie,food_url)
try :
cursor.execute(sql,value)
print('数据插入成功')
except pymysql.Error as e:
print('数据插入失败'+str(e))
db.commit()
except pymysql.Error as e:
print('数据库连接失败'+str(e))
db.close()
运行结果: