? ?昨晚深夜上久違的oj刷刷題,在打開網(wǎng)站時就萌生了爬取我校oj網(wǎng)站的題目以及同學(xué)們的作答情況的想法。
一,以下是我分析的過程:
??
已進入網(wǎng)站打開源碼發(fā)現(xiàn):這果然是被js渲染過的網(wǎng)站,并不能從查看網(wǎng)頁源碼分析下手,于是就只能打開開發(fā)者工具分析。
首先我進入第一道題目,觀察url是否有規(guī)律可循,經(jīng)過比較發(fā)現(xiàn)url確實有規(guī)律可循,具體規(guī)律為:
http://oj.dgut.edu.cn/problem/+題號? ,可是問題來了,當我打開題目的網(wǎng)頁源代碼的時候,發(fā)現(xiàn)也是被js渲染過的,所以進入開發(fā)者工具查看真實的請求地址,經(jīng)驗告訴我,被js渲染過的網(wǎng)頁一般真正的url藏在xhr頁面中,于是我去逐個逐個找,終于找到了


然后我再比較其他題目看看是否路徑有規(guī)律可尋,結(jié)果發(fā)現(xiàn)確實有規(guī)律可尋,具體規(guī)律為:http://oj.dgut.edu.cn/api/xproblem/+題號。接著我就制定爬蟲策略,該爬些什么信息,經(jīng)過一輪的思考后我決定爬取的為:題目,難度,內(nèi)容,輸入,輸出,作答情況,并且將信息存進sqlite數(shù)據(jù)庫中
于是我就開始寫爬蟲腳本了,經(jīng)過一輪的編寫和調(diào)試,腳本終于完成了。具體代碼如下:

實戰(zhàn)成果:

寫爬蟲過程中遇到的坑和解決辦法:
? ?我在分析的過程中發(fā)現(xiàn)最后一個題目的題號為1151,可是實際的題目數(shù)量就只有500多道題,意味著其中有些題號是空的,所以這此得要做出判斷,判斷當請求url時返回得結(jié)果是不是not found,不是得話就開始采集信息。具體操作在代碼中以作解釋。