【爬虫】(七)Python数据存储之MySQL(下)

上一篇关于Python和MySQL的简单联调做了学习。 这次主要是将这个过程再优化扩大点。 对教务处需要的数据都进行了处理存进数据库了。 也是对bug问题的总结。

我的编程哲学

其实这里面一直有一个问题的。 之前是Holi的后台一直想要我们把数据存成CSV格式的他再读取存进数据库。 可是这件事情在Python这边就可以完成啊。

后面就还是用着这样的想法去做: 从CSV文件里读取存进MySQL。 最直接的方法应该是:一步到位直接存进MySQL。

但是我还是认为,先把这个功能实现了才是最重要的。 其他的后面可以慢慢改。

这大概也就是Python的编程思想,着重于解决问题,而不是拘泥于语言语法。

图形化MySQL

有同学给我推荐了两款Navicat和SQLyog。 有另外一个队友也在用SQLyog,我就选它了。 确实是比命令行好用多了。 也不容易出问题。

在一个数据库里建了学生信息表,成绩表,课表,公告通知表,我的消息表。 剩下的问题就是从CSV文件里读取并存进MySQL。

CSV To MySQL

与上一篇一样,整体思路是先把爬下来的数据给写入col列,然后把爬下来的数据依行插入。

writer.writerow(('上课学期','课程编号','课程名称','课程学分','学位课' ,'成绩','获得学分','备注'))

insert的数据就和在SQLyog建好表匹配。

sql = "insert into `score`(`term`,`course_id`,`name`,`credit`,`degree_course`,`score`,`gain_credit`,`remarks`)values(%s,%s,%s,%s,%s,%s,%s,%s)"

之前存进的CSV文件有空格的问题也解决了。 有函数strip()、rstrip()、lstrip()可以解决这个问题。

cursor.execute(sql, (
                    e['上课学期'].strip(), e['课程编号'].strip(),e['课程名称'].strip(), e['课程学分'].strip(), e['学位课'].strip(), e['成绩'].strip(),e['获得学分'].strip(), e['备注'].strip(),))

其实,规则的网页还是比较好处理的。 而不规则的网页处理起来还得多想想。tr、td、th、li标签分配的很奇怪。 比如我的消息这一页面是这样处理的:

try:
        for row in rows:
            csvRow = []
            for td in row.findAll('td')[1:]:
                for li in td.findAll('li')[0::2]:
                    csvRow.append(li.get_text().strip().replace(' ', ''))
                writer.writerow(csvRow)
    finally:
        csvFile.close()

它的网页源码第一个td里面都是没用的,到后面的li标签甚至要取奇数,因为它只有三个,而第二个是空的。 总之,花了点时间完美的存进去了。 也算是体会到正则的强大和我还不会。

最后的几张表还是很规则的。

学生信息:

课表:

成绩:

培养计划:

公告通知:

bug总结

KeyError:

这是在把CSV文件存进MySQL里出现的错误。 研究了好久把col列写对着啊,字典怎么会出错。 事实证明人变懒就会出错。

模拟登录用的是同一个程序,在同一个程序的基础上改。 打开的CSV文件却没有改过来,字典必然不会对。。。低级错误。

blank error:

之前的Python前辈们都会把Python缩进当成一个梗来玩。 可是当程序多了起来,这就真的很容易犯错。

除了这个问题,在for循环里也很容易出错。 它也没有明显的标示,全凭感觉。 就是我觉得它应该是缩进了吧,其实还差好多。 我觉得我需要一把游标卡尺来解决这个bug.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏生信技能树

lncRNA实战项目-第三步-了解参考基因组及注释文件

下载原始测序数据: 在GEO数据库搜索GSE87182, 这里没有直接给出ftp地址,需要先从BioProject找到SRA号,可以得到RNA-Seq的SRA的...

65750
来自专栏Vamei实验室

协议森林05 我尽力 (IP协议详解)

作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁任何形式转载。 在粗略了解了IP接力和IP地址后,我们再反过来,看一看IP...

24490
来自专栏AI研习社

Github 项目推荐 | Twitter 开源数据分析工具 —— tinfoleak

Tinfoleak 是 OSINT (Open Source Intelligence) 和 SOCMINT (Social Media Intelligenc...

20330
来自专栏令仔很忙

新手学HighCharts(一)----基本使用

最近做的项目需要用到数据分析,图表显示,之前做项目的时候用到过highcharts,不过也只是简单的会用而已,然后再网上查了查highcharts的优点:

19010
来自专栏张善友的专栏

Entity Framework Code First 支持存储过程

存储过程(Stored Procedure)不仅仅是将多得简直荒唐的业务逻辑塞入数据库的一种方式;它还是避免将多得简直荒唐的存储逻辑塞入应用程序层(applic...

21680
来自专栏帘卷西风的专栏

编写简易斜45度地图编辑器

      最近在研究cocos2dx的地图,最开始使用的是Tiled,这个编辑器做比较小的地图还是比较强大的,不过做大地图的时候,有一些功能不太方便并且有缺陷...

12730
来自专栏逍遥剑客的游戏开发

Nebula3的场景管理

15660
来自专栏章鱼的慢慢技术路

Unity入门教程(下)

30230
来自专栏web编程技术分享

【Java框架型项目从入门到装逼】第一节 - Spring框架 IOC的丧心病狂解说,来一波神的视角

33160
来自专栏企鹅号快讯

计算机高频知识点详解

重磅!福建农信社招863人,大专/往届均可报考! 福建农信社报考须知:我是笔试类还是免笔试类? 紧急通知 | 农信社笔试内容大变动 01 计算机中的信息表示 1...

19650

扫码关注云+社区

领取腾讯云代金券