一次写爬虫碰到的问题
fork了lanbin510的豆瓣爬虫,想改写下写数据库。 这里有2个问题,一个是作者原先是基于python2.7的,我是直接用的3.6.9,所以有些语法上不大一样。
https://github.com/timoseven/DouBanSpider
因为要用mysql,直接docker来一个就行了,结果发现默认装的都8.0了,我还在用5.6呢
1 | sudo docker run --name bookdb -p 3306:3306 -e MYSQL\_ROOT\_PASSWORD=123456 -d mysql |
至于8.0增加了什么东西,可以先参考下这个。但是这个不是我碰到的问题。
#https://www.jianshu.com/p/be29467c2b0c
开始建表了这就。
1 | CREATE TABLE IF NOT EXISTS `bookinfo`( |
我去,建一个表居然出来3个warning,这也是牛逼大发了,不过还好都是关于未来的,而不是现在的。
不过接下去这个问题就不是经验可以覆盖的,必须google,发现创建新用户一直都是报错。
1 | mysql> GRANT ALL PRIVILEGES ON douban_book.* TO 'douban'@'127.0.0.1'IDENTIFIED BY '123456'; |
这都没开始flush呢,还居然报错了,实在看不出来是什么问题。只好放狗搜索了下。原来现在只能是先create user再进行grant。
1 | CREATE USER 'douban'@'127.0.0.1' IDENTIFIED BY '123456'; |
好了,数据库的解决好了就看看python3下的mysql的驱动有哪些了,发现pymysql最合适,那就装上了,可再实际跑的时候一直各种报错啊。
就很简单的几条调用还居然报错了
1 | Traceback (most recent call last): |
我数据表里有int类型啊,这里也写了%d了,可为什么一直报错呢。只能继续放狗搜索下,发现居然使用pymysql的时候,所有字段不管什么类型都是使用%s
https://blog.csdn.net/jy1690229913/article/details/79407224
然后小白小朋友还特地去看看为什么会这样
https://github.com/PyMySQL/PyMySQL/blob/master/pymysql/converters.py
就是这个文件的第324行和53,54行说明了这个问题,居然这个里面把所有的都变成了string了,可你们的帮助文档里压根什么都不说明。
help(pymysql.cursors)里面就只写了
1 | | executemany(self, query, args) |
这种帮助就跟没有我看也没什么区别啊。