這次換另外一個大陸的漫畫網站99漫畫網。會找這個網站是因為看到vgod的一篇plurk,裡面還有人只用javascript寫的google extension就做到了,那應該也不會很難做,所以就也來試試看。
跟第一個站比起來,第一個站是靜態的,下載檔案有一堆擋bot的機制,這次這個站是用javascript動態讀圖的,不過下載檔案直連ok而且很快 XD。要做的事和上次差不多,都是先在索引頁找到全部的每話的下載連結,再連進去找每張圖片的url。不過這次這個網站的url都是藏在javascript裡。
這次在索所頁改用lxml來找每期的超連結位置,之前用python內建的HTMLParser找,每次只能找一個標籤而且找標籤就不能找文字,變成要自己設一堆flag變數,有夠麻煩。這次用lxml是先把網頁建成一個elementTree,然後用xpath可以直接找「div標籤下的li標籤下的有target屬性值為_blank的a標籤」一行就搞定了,差有夠多!不過lxml建tree的方法有夠多,亂七八糟,最後是用lxml.etree.HTML的方式來建,其他的不是parse到一半就出錯,就是不支援xpath語法 = =。
找到各期連結就可以進去了,經過看完javascript原始碼(javscript唯一的好處就是可以看到原始碼…php就看不到),這個網站如果直接連進各期網頁然後讀取原始碼,會抓到一個loading中的頁面原始碼。不過好在他每一期所有的漫畫圖片網址都有藏在網頁裡面的<head> </head>裡面一個叫PicListUrl的變數,所以不用煩腦這個自動跳轉頁面的問題。找到圖片網站後還有每個漫畫都不一樣的server,最後找到/v2/vai.js這個原始檔,ServerList陣列藏在這裡。經由每次連進去每期漫畫的url最後?s=#可以知道要用哪一個server。合併起來就是每張圖片的原整URL。
找的過程中看了一些javascript。因為javascript是明碼傳輸,為了省空間或是怕原始碼外流,通常網站都會把空白刪掉或是做一些妨礙閱讀的事。最好笑的是下面這個,原本的原始碼沒有斷行,還在裡面執行eva去把後面的字串當成程式執行
eval(function(p,a,c,k,e,d){while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+c+'\\b','g'),k[c])}}return p}('7.2(\'<0 1="/3/8.6" 5="4"></0>\');7.2(\'<0 1="/3/9.6" 5="4"></0>\');',10,10,'script|src|write|v2|JavaScript|language|js|document|ii|vai'.split('|')))
不過在javascript原始碼美化工具按了一下,什麼!竟然只是短短兩行的include其他javascript XD
document.write('<script src="/v2/ii.js" language="JavaScript"></script>');
document.write('<script src="/v2/vai.js" language="JavaScript"></script>');
沒有留言:
張貼留言