前言作為一名合格的furry,我不僅要吸娜娜奇,還要天天泡在fa吸大觸們的furry作品,這其中難免遇到某個十分喜愛的作者,於是便想down空此作者的所有作品。鑒於一張張的保存實在費時費力,寫個爬蟲來解決眼前的問題似乎再好不過了,所以便有了現在這個下載器。功能介紹根據作者名批量下載此作者的所有作品,... ...
前言
作為一名合格的furry,我不僅要吸娜娜奇,還要天天泡在fa吸大觸們的furry作品,這其中難免遇到某個十分喜愛的作者,於是便想down空此作者的所有作品。 鑒於一張張的保存實在費時費力,寫個爬蟲來解決眼前的問題似乎再好不過了,所以便有了現在這個下載器。
功能介紹
根據作者名批量下載此作者的所有作品,包括畫廊和手稿。可填寫自定義高級參數,包括從第幾頁第幾張開始,下載多少張。對於登陸後才能查看的內容,需要填寫字元串cookie。下載的過程中會有詳細的下載日誌顯示在文本框中。
目標操作平臺
Windows
語言
c#
最低需求
.net4.0
代碼流程框架
收集用戶在界面中輸入的信息> 初始化整體下載所需的變數> 開一個線程來執行下載函數> 判斷當前需要下載哪個圖集> 進入對應圖集的下載函數並初始化相關變數> 下載並解析列表頁面> 迴圈下載本頁的所有圖片> 迴圈下載所有頁> 下載下一個圖集> 執行結束函數。
遇到的坑
這麼個小玩意本以為不會花太久就能做成心儀的樣子,然而事實是從開始到現在斷斷續續已經做了半年,經歷好幾個“大版本”修改,才算滿意。
這裡整理下曾經遇到的坑
初始化的時機
並不是所有參數的初始化時機都是一樣的,比如總下載量需要在整個下載的最開始初始化為零,這個時機在用戶按下開始按鈕之後,下載開始之前。
而另一個參數,單個圖集的總下載量,這個參數是為了判定是否已經到達最大下載量。它就需要在另一個時機來歸零,也就是放在圖集下載函數的最開始,這樣就可以在連續下載圖集的時候,準確無誤的初始化。
cookie模擬登錄
這個應該是爬蟲里比較基本的操作了,不過我自己按照網上的步驟寫出來的代碼,經常登陸失敗,不知道是cookie的問題還是代碼的問題。後來索性直接用了網上比較成熟的整套代碼,只用來做cookie登錄真是大材小用了,不過起碼不用為輪子的事操心。
然後…還是登陸失敗,那就很明瞭了,cookie有問題,所以我便仔細研究cookie字元串的格式,發現其中有幾個鍵值對的格式十分的奇妙,兩個分號間有兩個等號,導致程式分析失敗,,
以後還是不用360瀏覽器了。
去掉搗亂的幾個cookie之後就沒什麼問題了
html頁面分析
開始是用的string類裡面的各種函數,查詢字元串,移位,替換,代碼又長又難以理解,後來去學了正則表達式,三行搞定所有分析,強大到無話可說。
結尾
寫這個軟體之前我都不知道啥是爬蟲,直到後來有人跟我說這就是。。
很高興通過這個軟體既滿足了私欲【x】,又學到了一堆新知識,尤其是強大的正則【導致我去學了perl,不過半途而廢了】。
代碼已經發佈到github,地址是這裡