? ?昨晚深夜上久違的oj刷刷題系吩,在打開網(wǎng)站時(shí)就萌生了爬取我校oj網(wǎng)站的題目以及同學(xué)們的作答情況的想法。
一妒蔚,以下是我分析的過(guò)程:
??
已進(jìn)入網(wǎng)站打開源碼發(fā)現(xiàn):這果然是被js渲染過(guò)的網(wǎng)站穿挨,并不能從查看網(wǎng)頁(yè)源碼分析下手,于是就只能打開開發(fā)者工具分析肴盏。
首先我進(jìn)入第一道題目絮蒿,觀察url是否有規(guī)律可循,經(jīng)過(guò)比較發(fā)現(xiàn)url確實(shí)有規(guī)律可循叁鉴,具體規(guī)律為:
http://oj.dgut.edu.cn/problem/+題號(hào)? 土涝,可是問(wèn)題來(lái)了,當(dāng)我打開題目的網(wǎng)頁(yè)源代碼的時(shí)候幌墓,發(fā)現(xiàn)也是被js渲染過(guò)的但壮,所以進(jìn)入開發(fā)者工具查看真實(shí)的請(qǐng)求地址,經(jīng)驗(yàn)告訴我常侣,被js渲染過(guò)的網(wǎng)頁(yè)一般真正的url藏在xhr頁(yè)面中蜡饵,于是我去逐個(gè)逐個(gè)找,終于找到了
然后我再比較其他題目看看是否路徑有規(guī)律可尋胳施,結(jié)果發(fā)現(xiàn)確實(shí)有規(guī)律可尋溯祸,具體規(guī)律為:http://oj.dgut.edu.cn/api/xproblem/+題號(hào)。接著我就制定爬蟲策略舞肆,該爬些什么信息焦辅,經(jīng)過(guò)一輪的思考后我決定爬取的為:題目,難度椿胯,內(nèi)容筷登,輸入,輸出哩盲,作答情況前方,并且將信息存進(jìn)sqlite數(shù)據(jù)庫(kù)中
于是我就開始寫爬蟲腳本了,經(jīng)過(guò)一輪的編寫和調(diào)試廉油,腳本終于完成了惠险。具體代碼如下:
實(shí)戰(zhàn)成果:
寫爬蟲過(guò)程中遇到的坑和解決辦法:
? ?我在分析的過(guò)程中發(fā)現(xiàn)最后一個(gè)題目的題號(hào)為1151,可是實(shí)際的題目數(shù)量就只有500多道題抒线,意味著其中有些題號(hào)是空的班巩,所以這此得要做出判斷,判斷當(dāng)請(qǐng)求url時(shí)返回得結(jié)果是不是not found十兢,不是得話就開始采集信息趣竣。具體操作在代碼中以作解釋。