1. 程式人生 > >對爬取中國裁判文書網的分析

對爬取中國裁判文書網的分析

相信做爬蟲的小夥伴們遇到‘中國裁判文書網’,就感覺無從下手。沒關係,救星來了,幫你快速理清爬蟲思路。 一.工具:谷歌瀏覽器 二.要爬取的內容:所有案件的決定書的詳細內容。例: 在這裡插入圖片描述 在這裡插入圖片描述 但右鍵檢視‘網頁原始碼’,卻什麼內容都沒有。 三.裁判文書網分析: 1.該網站是動態網站,(原始碼裡面有用的資訊都沒有)–>網頁原始碼是否含script標籤,list={’’:’’}–>列表頁是否有專門的json介面->經發現:列表頁有json介面。 2.研究json介面,發現引數vl5x,guid是隨機字串,其餘的引數都是固定的。所以需要分析出這兩個引數的來源,以及引數值是怎麼設定的。 在這裡插入圖片描述 3.引數來源一般有以下幾個: ①某一個url(一般不需要看Img/css/js,可能會在 網站的url/json的url),它的響應頭Set-Cookie裡面可能含有這些引數。注意:將網站的cookie從瀏覽器中全部清空(瀏覽器的更多工具->清除瀏覽資料)。因為cookie會有過期時間,如果cookie沒有過期,伺服器是不會將cookie放在set—cookie中返回。 ②從json介面返回的json資料中,可能含有後續請求的引數,翻頁引數中很常見; ③js加密得到的引數:文書網,工商資訊網,美團網,抖音,知乎; a.簡單的js加密,可以直接使用python語言還原出來; b.在python中執行js程式碼,execjs(windows)直接調js,不用還原。pypv8(Linux)直接可以呼叫js檔案中的函式。 c.非常異常複雜的js加密,考慮APP端的資訊爬取;(一般APP端的爬取比windows的稍簡單) **********先來分析vl5x引數

4.通過查詢,Set—Cookie/json中都沒有引數vl5x,此時去全域性搜尋vl5x,在Lawyee.CPWSW.JsTree.js檔案和Lawyee.CPWSW.List.js檔案這兩個檔案中,找到了引數cl5x 在這裡插入圖片描述 5. 發現引數vl5x是通過data: { “Param”: treeparam, “vl5x”: getKey(), “guid”: guid1, “number”: yzm1 }中的getKey()函式得到的一個值,接下來去分析getKey()函式 在這裡插入圖片描述 6.在Lawyee.CPWSW.ListExtend.js檔案第371行中,發現了getKey函式的定義。 7.在getKey函式的定義中,發現eval()函式,該函式是對js程式碼進行加密的函式,所以需要對eval()函式進行還原。還原成js函式。先示範操作其中的一條語句:eval(de("eval(_fxxx( 替換de,再替換_fxxx,再解密) 在這裡插入圖片描述
8.按照第7.8步,依次將所有語句都解密出來,將最終結果貼上到新建立的wenshu.js中在這裡插入圖片描述 9.你要的wenshu.js在這裡。將其放在Python中,與wenshu.py同級。 10.在wenshu.js中。例如makeKey_5( ) ,發現裡面包含Base64()類,hex_md5()類,hex_sha1()類,所以咱們需要去找這些類,發現在’網路‘,‘js’下找到‘Base64.js’‘md5.js’, ‘sha1.js’,然後將Base64定義函式的全部內容function Base64(…)複製貼上到wenshu.js(注意放在getKey()函式裡面,與其他所有定義函式同級)。hex_md5()類,hex_sha1()類也是如此。 11.在最終的wenshu.js中1993到2004行將var cookie=getcookie(‘vjkl5’)…註釋掉,最終return的result就是咱們所需要的vl5x 在python中呼叫getkey()函式就可以,需要安裝PyExecJS包,例項化一個js物件,這個物件包含了js執行的環境,利用這個物件呼叫call()函式