無法使用此方法到zerojudge抓取使用者的AC資料,因為zerojudge登入認證方式已經更改了,此文章可以用於其他系統,登入帳號後抓取特定網頁與欄位資料。
使用Scrapy使用表單登入zerojudge指定使用者的AC資料,儲存到MongoDB
本程式完整程式碼在GitHub,網址如下
https://github.com/jang0820/scrapy/tree/master/zjac_mongo
Step0)在Mongo內建立資料庫zj,新增collection為acs
在命令提示字元中使用「scrapy startproject zjac_mongo」新增專案zjac_mongo,命令提示字元中使用「scrapy genspider ac zerojudge.tw」產生spider。
Step1)編輯zj\spiders\zero.py,scrapy使用start_urls的網址抓取資料,自動呼叫函式parse登入zerojudge,記得要使用自己的zerojudge帳號與密碼登入,登入後因為第20行callback的設定,指定呼叫函式parse_user,函式parse_user讀取指定使用者的狀態網頁,函式parse_user最後呼叫函式parse_user_process(第25行callback的設定),函式parse_user_process分析網頁獲得帳號與AC題數,將資料儲存到item物件,scrapy經由設定會將item交給pipeline處理,在pipeline撰寫程式將資料加到MongoDB資料庫
Step2)修改zj\item.py,建立資料接收的資料欄位
Step3)修改zj\pipelines.py,將item插入到資料庫
Step4)本專案設定檔在zj\settings.py,新增資料庫設定,設定抓取網頁的延遲時間,啟用ITEM_PIPELINES才會將item儲存到Mongo資料庫
Step5)如果從GitHub下載程式碼,在zjac_mongo資料夾執行指令「scrapy crawl ac」就可以登入zerojudge查詢指定使用者的AC題數與AC題號,最後將資料加到Mongo資料庫。
延伸閱讀