網絡爬蟲 - 真·AC自動機

  前幾天無聊,忽然想寫點有趣的代碼,關於網絡方面的,剛開始就想寫一個能從oj上自動拉個比賽的軟件,後來查資料時看到了神奇的AC自動機,於是自己也去實現了遍。

  

  一天狂A 500多道。。。就當自娛自樂了。在這裏提醒大家,AC需謹慎,我跑程序的時候已經將程序放慢了許多,也實時監控hdu(oj大部分題是從hdu拉的)是否卡住,但即使這樣,還是傷到了學長的oj。。。

  自動AC原理比較簡單,大概就是幾個步驟:

  1. 從oj 獲取某題的關鍵字(用於搜索,找出題解,關鍵字可以自己決定採用什麼)

  2. 百度搜索關鍵字

  3. 找到博客鏈接

  4. 找到博客中代碼部分

  5. 登錄oj

  6. 將得到的代碼提交到該題

  實現也不難,就是不斷使用get、post 罷了,就是要細心。我是用C#寫的,get、post需要自己封裝一下,也很簡單。

  看上面步驟:

  第一個需要看你要在哪個oj爬,每一個oj的實現不同。

  第二個步驟,百度搜索hdu1024其實就是跳到網頁:https://www.baidu.com/s?wd=hdu1024。

  第三個步驟,看選取什麼博客,我選擇C博客,博客園的代碼段太亂(網頁元素和代碼放在一起了...)。

  第四個步驟,通過找“code”一般就能找到代碼了,注意一下細節就可以了。

  第五個步驟,登錄也要看具體oj,post的參數中放上用戶名、密碼,大概就可以了。

  第六個步驟,提交也用post,看一下提交頁面的源代碼,分析一下需要傳幾個參數,小心一些即可。

  需要注意的是post時,參數字符串需要進行編碼,比方說你地址欄輸入https://www.baidu.com/s?wd=hdu 1089,瀏覽器會自動轉化成https://www.baidu.com/s?wd=hdu%201089,也就是說中間是不允許出現空格的,空格用%20代替,你用post的時候就沒有人幫你轉化了,需要自己寫一個編碼函數。

  大家閒着的時候可以試試,但千萬不要太過分,有可能會被封號的哦

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章