和爬蟲工程師總結-那些培訓視頻不講的爬蟲進階教程


建議先看片尾

文件操作基礎

os模塊

py正則

re模塊

requests庫

可以學學urllib(requests基於urllib寫的)

https://www.cnblogs.com/yhll/p/9760494.html

細碎知識點

b = a.split("_")[1]#從第0個開始,_分割
s = "swww"
c = "aaaaaaaaaa{s}bbb"#字符串拼接
#字符編碼問題解決技巧,例如:出錯嘗試二次編碼

保持登陸姿態

import requests

session = requests.session()
res = session.get()#類似於requests

防盜鏈

通過接收父頁面的鏈接來判斷鏈接的來源(上一級,通常是用來防止其他網站復制抄襲)

refer:通過head參數里的refer來檢查

通過對請求鏈接進行處理

X-Forwarded-For

客戶端請求偽造

json和字典的區別

json 本質上還是字符串,只是按 key:value 這種鍵值對的格式來的字符串

img

  • Python開發中字典和 json的區別?字典是一種數據結構,json 是一種數據的表現形式,字典的 key 值只 要是能 hash 的就行,json 的必須是字符串。
  • Python開發中字典和 json的概念區別:
      一、字典
      字典是一種數據結構,而json是一種數據格式,格式就會有一些形式上的限制,比如json的格式要求必須且只能使用雙引號作為key或者值的邊界符號(值如果是數字可以不用加雙引號),不能使用單引號,用單引號或者不用引號會導致讀取數據錯誤,而且“key”必須使用邊界符(雙引號),但字典就無所謂了,可以使用單引號,也可以使用雙引號。
      dict是一個完整的數據結構,是對Hash Table這一數據結構的一種實現,是一套從存儲到提取都封裝好了的方案。它使用內置的哈希函數來規划key對應value的存儲位置,從而獲得O(1)的數據讀取速度。
      二、json
      json是JavaScript Object Notation的首字母縮寫,字面的意思是javascript對象表示法,這里說的json指的是類似於javascript對象的一種數據格式對象,目前這種數據格式比較流行,逐漸替換掉了傳統的xml數據格式, 前端使用ajax的時候后台返回該前端的數據格式就是json格式的。
      json是一種數據格式,是純字符串。可以被解析成Python的dict或者其他形式。
      三、json和dict區別對比
      json的key只能是字符串,python的dict可以是任何可hash對象(hashtable type);
      json的key可以是有序、重復的;dict的key不可以重復。
      json的value只能是字符串、浮點數、布爾值或者null,或者它們構成的數組或者對象。
      json任意key存在默認值undefined,dict默認沒有默認值;
      json訪問方式可以是[],也可以是.,遍歷方式分in、of;dict的value僅可以下標訪問。
      json的字符串強制雙引號,dict字符串可以單引號、雙引號;
      dict可以嵌套tuple,json里只有數組。
      json:true、false、null
      python:True、False、None
      json中文必須是unicode編碼,如"\u6211".
      json的類型是字符串,字典的類型是字典。
      四、hashtable
      一個對象當其聲明周期內的hash值不發生改變,而且可以跟其他對象進行比較時,這個對象就是hashtable的。
      1、python中的基本類型都是Hashtable,如str、bytes、數字類型、tuple等;
      2、用戶自定義的類型默認都是hashtable,因為它們的hash值就是id()值;
      3、frozenset始終都是hashtable的,因為它們所有的項目都是被定義成hashtable的;
      4、只有當tuple內的所有項都是hashtable的時候,tuple才是hashtable;

編碼

encoding、utf-8、gbk、charset等

代理(入獄基礎)

pro = {
    "http":"http://*********"
}
res = requests.get(url,proxies = pro)

線程池

多線程加快速度

微信小程序

image-20210531105259734

官方文檔不香?

https://developers.weixin.qq.com/miniprogram/dev/devtools/debug.html

https://blog.csdn.net/qq_38219875/article/details/106931219?utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~default-6.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~default-6.control

干點臟活(扒微信小程序源碼)

https://blog.csdn.net/qq_30548105/article/details/84998218?utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~default-17.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~default-17.control

https://blog.csdn.net/chengzailushang/article/details/113364653?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-4&spm=1001.2101.3001.4242

控制台入門

https://www.pianshen.com/article/15161573557/

https://blog.csdn.net/weixin_42359436/article/details/108224120?utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromMachineLearnPai2~default-3.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromMachineLearnPai2~default-3.control

無限debug

手段羅列

https://blog.csdn.net/Sheation/article/details/112727599

啪一下我把無限debug過了

image-20210531095522779

image-20210531095606496

image-20210531095648611

刷新下之后,再重復跳過幾個debug就過了

這是一個定時器無限debugger,如果兩次時間差大於100,那么就會一直讓我們處於debugger狀態。

當遇到這種反調試的手法時,可在進入debugger狀態后,在console中輸入以下代碼,以此跳過。

for (var i = 1; i < 99999; i++)window.clearInterval(i);
1

image-20210531101114170

對沒錯,它會報錯,但是它不會debug,嗯是的

  1. hook(此處沒有,按照其他博客文章截圖為例)

image-20210531102918945

image-20210531102918945

  1. 改變判斷條件

image-20210531103617308

image-20210531103632168
f8一下,就跳轉到下一個點了

  1. 禁止斷點

image-20210531103923334

f8下就好,但是不建議使用,因為此功能會同步取消打斷點,后期下斷埋下隱患

瑞數

由於加密Js代碼每次請求變量名都不一樣,在線分析會很不方便,所以需要將文件離線下載到本地,再進行分析。

方法1:硬搞JS。這條路我踩了兩個版本的瑞數,過程極其艱難。可謂是一錘更比一錘狠,為了頭發我果斷放棄。
方法2:考慮到瀏覽器。抹掉canvas、webgl 和audio等瀏覽器指紋+鼠標滑動點擊,瀏覽器開一個服務,爬蟲直接用就行了,腦海中這個方案基本完美。
方法3:js對抗。借助chrome瀏覽器注入進去所有被監控的東西,加上干擾。
方法4:去申請瑞數的試用版,還原源碼。
方法5:利用大量R雞兒。就正常去爬,提升他們反爬的誤傷率,假如他們自己都訪問不了自家網站,是不是有可能下線瑞數反爬。


例子

我采用了第五種+第三種,大量的服務端供我使用,目前低成本采集。
方法1:假如你扣出來js,為了速度快你用nodjs起個服務,假如代碼里面有一些刪文件的操作(瀏覽器不能執行,nodejs可以觸發的代碼),你哭吧。
方法2:我使用了miniblink這個所謂打包后8M的瀏覽器,實際上是20多M,可我只需要能打開網頁,能ajax訪問就行了。於是乎找了老版本去搞。
方法3:emm,我能說具體的,正在用呢。看思路就能自己實現。
方法4:你自測吧,我沒成功,對方非要來公司聊。
方法5:你自己找渠道買雞兒,就讓他看到一賊正常的客戶在訪問,他能咋辦。

ob混淆

jsvm

wasm

MD5 ars rsa base64

設計密碼學知識,有的請求會加密后提交,要通過js代碼解決加密問題

嚴格意義base之類只能說編碼方式,不算加密

常識+理解+專業知識+js調試

app

逆向,反編譯,接口提取等

AAEncode混淆

JSFunck混淆

JJEncode混淆

eavl混淆

加速樂

第一次訪問時會返回一段加密的js,檢查瀏覽器環境,符合預設才會進一步請求其他資源文件,不符合直接返回521狀態碼。登錄賬號后,服務器端返回cookie,包括獲取目標數據的關鍵cookie鍵jsl_clearance,每二三十分鍾后jsl_clearance失效,若用戶有其他發起請求數據的操作,本地加密js文件會請求服務器端刷新__jsl_clearance,沒刷新時返回521狀態碼,無法獲取目標數據。

字體加密

字體庫和參數偏移

驗證碼

各種,處理方法有:

  1. 圖像處理訓練
  2. 調接口,花錢找專業的

cookie參數生成加密

追生成就完事了

ua反爬

基礎部分,設置ua頭

接口返回的數據加密

ip138Ajax接口請求返回值需解密js代碼

請求參數加密

通過對特定請求參數進行加密變換,例如base64,MD5加密后傳輸

往往會因為傳輸安全問題進行加密再提交,例如銀行系統有時會采用MD5加密后用salt再進行MD5包裹,加密充分后傳輸

驗證碼

驗證碼又分為普通的字符數字 滑塊 點選

還有就是一些驗證碼的廠商 比如數美 極驗 易盾 谷歌 阿里

cookie綁定常登陸ip

字面意思

自動化工具

selenium

fiddle、burp

中間抓包

js基礎

會看js代碼邏輯、吧

js在py運行

js2py

execjs

webpack

打包好,下一步本地分析,有些操作往往都是在本地調試的,不為啥,,,方便

本地分析代碼

例如hubuilder,sublime3,vscode等

最后

本人在出學爬蟲之后總感覺差點意思,好多東西爬不下來的,我一個朋友需要某些睡不着覺網站內容時,參數給全還是不返回東西,很惱火直到后來,才發現,除了大型項目需要的數據庫和框架,反爬和反反爬更令人振奮,做web安全時也會有知識點的重合。

所以這篇文章交給你思路,具體你來學,幫你少踩坑。

感謝下十一大佬(在職爬蟲工程師),比較低調,好多思路都是他幫我想的,平時也指導了我很多東西;還有早睡早起大哥,幫我審核文章,兩位都是亦師亦友。

文章比較雜,思路比較多,后期會補充,聯系教父再發一篇文章的

個人博客:

www.cnblogs.com/l1j1ng

東西很少很少,以后會整理一些東西放出來的,希望大家關注


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM