date: 2017-02-28 18:44:10
上一篇關(guān)于Python和MySQL的簡(jiǎn)單聯(lián)調(diào)做了學(xué)習(xí)。
這次主要是將這個(gè)過(guò)程再優(yōu)化擴(kuò)大點(diǎn)。
對(duì)教務(wù)處需要的數(shù)據(jù)都進(jìn)行了處理存進(jìn)數(shù)據(jù)庫(kù)了。
也是對(duì)bug問(wèn)題的總結(jié)。
我的編程哲學(xué)
其實(shí)這里面一直有一個(gè)問(wèn)題的。
之前是Holi的后臺(tái)一直想要我們把數(shù)據(jù)存成CSV格式的他再讀取存進(jìn)數(shù)據(jù)庫(kù)。
可是這件事情在Python這邊就可以完成啊。
后面就還是用著這樣的想法去做: 從CSV文件里讀取存進(jìn)MySQL。
最直接的方法應(yīng)該是:一步到位直接存進(jìn)MySQL。
但是我還是認(rèn)為,先把這個(gè)功能實(shí)現(xiàn)了才是最重要的。
其他的后面可以慢慢改。
這大概也就是Python的編程思想,著重于解決問(wèn)題,而不是拘泥于語(yǔ)言語(yǔ)法。
圖形化MySQL
有同學(xué)給我推薦了兩款Navicat和SQLyog。
有另外一個(gè)隊(duì)友也在用SQLyog,我就選它了。
確實(shí)是比命令行好用多了。
也不容易出問(wèn)題。
在一個(gè)數(shù)據(jù)庫(kù)里建了學(xué)生信息表,成績(jī)表,課表,公告通知表,我的消息表。
剩下的問(wèn)題就是從CSV文件里讀取并存進(jìn)MySQL。
CSV To MySQL
與上一篇一樣,整體思路是先把爬下來(lái)的數(shù)據(jù)給寫(xiě)入col列,然后把爬下來(lái)的數(shù)據(jù)依行插入。
writer.writerow(('上課學(xué)期','課程編號(hào)','課程名稱','課程學(xué)分','學(xué)位課' ,'成績(jī)','獲得學(xué)分','備注'))
insert的數(shù)據(jù)就和在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)"
之前存進(jìn)的CSV文件有空格的問(wèn)題也解決了。
有函數(shù)strip()、rstrip()、lstrip()可以解決這個(gè)問(wèn)題。
cursor.execute(sql, (
e['上課學(xué)期'].strip(), e['課程編號(hào)'].strip(),e['課程名稱'].strip(), e['課程學(xué)分'].strip(), e['學(xué)位課'].strip(), e['成績(jī)'].strip(),e['獲得學(xué)分'].strip(), e['備注'].strip(),))
其實(shí),規(guī)則的網(wǎng)頁(yè)還是比較好處理的。
而不規(guī)則的網(wǎng)頁(yè)處理起來(lái)還得多想想。tr、td、th、li標(biāo)簽分配的很奇怪。
比如我的消息這一頁(yè)面是這樣處理的:
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()
它的網(wǎng)頁(yè)源碼第一個(gè)td里面都是沒(méi)用的,到后面的li標(biāo)簽甚至要取奇數(shù),因?yàn)樗挥腥齻€(gè),而第二個(gè)是空的。
總之,花了點(diǎn)時(shí)間完美的存進(jìn)去了。
也算是體會(huì)到正則的強(qiáng)大和我還不會(huì)。
最后的幾張表還是很規(guī)則的。
學(xué)生信息:
課表:
成績(jī):
培養(yǎng)計(jì)劃:
公告通知:
bug總結(jié)
KeyError:
這是在把CSV文件存進(jìn)MySQL里出現(xiàn)的錯(cuò)誤。
研究了好久把col列寫(xiě)對(duì)著啊,字典怎么會(huì)出錯(cuò)。
事實(shí)證明人變懶就會(huì)出錯(cuò)。
模擬登錄用的是同一個(gè)程序,在同一個(gè)程序的基礎(chǔ)上改。
打開(kāi)的CSV文件卻沒(méi)有改過(guò)來(lái),字典必然不會(huì)對(duì)。。。低級(jí)錯(cuò)誤。
blank error:
之前的Python前輩們都會(huì)把Python縮進(jìn)當(dāng)成一個(gè)梗來(lái)玩。
可是當(dāng)程序多了起來(lái),這就真的很容易犯錯(cuò)。
除了這個(gè)問(wèn)題,在for循環(huán)里也很容易出錯(cuò)。
它也沒(méi)有明顯的標(biāo)示,全憑感覺(jué)。
就是我覺(jué)得它應(yīng)該是縮進(jìn)了吧,其實(shí)還差好多。
我覺(jué)得我需要一把游標(biāo)卡尺來(lái)解決這個(gè)bug.