美文网首页
【爬虫】(七)Python数据存储之MySQL(下)

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

作者: 朴有天虹 | 来源:发表于2017-06-06 15:45 被阅读0次

    date: 2017-02-28 18:44:10

    上一篇关于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.

    相关文章

      网友评论

          本文标题:【爬虫】(七)Python数据存储之MySQL(下)

          本文链接:https://www.haomeiwen.com/subject/wdzgfxtx.html