【爬蟲(chóng)】(七)Python數(shù)據(jù)存儲(chǔ)之MySQL(下)

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.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容