最近项目又让写爬虫程序,这次用的MySql数据库,上次用的Oracle数据库,这次在爬取数据之后存库的时候并没有用之前的拼接sql进行存库,因为前一段学习Python视频的时候,视频里的老师说拼接的话存在sql注入问题,所以这次用了占位符%s,来防止sql注入
在填充的时候就会加引号了,写完之后意识到之前写的那个爬虫脚本也存在相同问题,然后改成占位符%s之后一直报错,百度了之后才知道,Oracle中占位符不可以用%s,需要用:1,:2来占位,以后遇到坑总结下,可能就印象深刻啦
简单爬虫Python+Oracle
简单爬取信息之BeautifulFly+MySql
用Request简单爬取英雄联盟所有皮肤
动态爬取flash数据,这篇有点难,F12看不到数据需要借助抓包工具
看不懂上一篇抓包工具charles的话,结合这一篇博客理解
最原先拼接的SQL:
sql = "insert into PRODUCTPRICE(ID,NAME,PRICE,UNIT,AREA,INDATE) values ('" + str(uuid.uuid1()) + "','" + record["farmProduceName"] + "','" + str(record["averagePrice"]) + "','" + b + "','" + record["marketName"] + "','" + str(record["reportDate"]) + "')"
改成MySql占位符的SQL:
sql = "insert into PRODUCTPRICE(ID,NAME,PRICE,UNIT,AREA,INDATE) VALUES (%s,%s,%s,%s,%s,%s)"
结果就出现了“ORA-01036: 非法的变量名/编号”的错误。
解决方法:
将传参的占位符改为“:1, :2, :3”,
改成Oracle的SQL
sql = "insert into PRODUCTPRICE(ID,NAME,PRICE,UNIT,AREA,INDATE) VALUES (:1,:2,:3,:4,:5,:6)"
再次执行,问题解决。