???? 首先1??。。。全篇使用的技術棧當然是python了,畢竟作為一名點點點工程師,實際工作中做測試開發用的也是python,畢竟測試框架么,不需要什么"速度"。也會一點點cpp和js,但不多。什么?你說go和java?那只會用fmt和sout輸出一下hello world,哈哈哈
PS:加了這么多批注,只是為了我自己看能方便些,還有我的個人想法和經驗在里面,請叫我現代牛皮癬
1. 爬蟲介紹
ChatGPTCV過來的。。。畢竟專業!!!我做不到這么好👌
爬蟲(Web Crawler 或 Spider)是一個自動化程序,用于瀏覽互聯網并提取信息。爬蟲通過訪問網頁、解析內容和提取數據來實現數據收集,通常用于以下幾個主要目的:
-
數據采集
爬蟲可以從各種網站中自動提取信息。這種信息可以是產品價格、文本內容、圖片、用戶評論等,廣泛應用于市場分析、研究和監控等領域。 -
搜索引擎索引
搜索引擎(如 Google、Bing)使用爬蟲來抓取互聯網上的網頁,并將其內容索引,以便用戶在搜索時能夠快速找到相關信息。 -
競爭分析
企業或市場研究者可以使用爬蟲監控競爭對手的價格、產品和市場活動,以制定更好的業務策略。 -
數據清洗和整理
爬蟲可以提取原始數據并進行格式化,方便后續的數據分析和處理。 -
內容抓取
爬蟲可以用于抓取特定網站的內容,進而進行二次開發,比如生成數據報告、創建數據集等。 -
社交媒體分析
爬蟲可以從社交媒體平臺提取數據,分析用戶行為、趨勢及輿情等。 -
監控網站變化
爬蟲可以定期訪問特定網站,監控內容的任何變化,比如價格變化、新聞更新等。
2. 技術棧
2.1 Python相關
2.1.1 python基礎
這部分寫個大概就直接pass了,默認我自己會python,畢竟是爬蟲類博客----在小破站找課發現每一個課都會講一下基礎,我也給帶上!!😘
- 語法,常量,變量,數據類型,運算符等
- 分支,循環等
- 數組,列表,元組,集合,字典等
- 函數,類,模塊,庫,面向對象(封裝繼承多態)等
- 異常,文件,匿名函數等
- 閉包,遞歸,裝飾器,正則等
- 數據結構,算法等
2.1.2 網絡請求庫
重點開始了??,基礎但很重要的玩意兒
- requests ---- 支持發送各種類型的請求(GET、POST等),并能夠處理響應 ---- 常用庫,個人覺得特別好用,做接口自動化也喜歡用這個庫
- urllib ----- python標準庫
- aiohttp ---- 異步 HTTP 客戶端和服務器框架,使用 asyncio 實現,可以處理高并發的請求
2.1.3 網頁解析庫
- BS4 ---- 解析 HTML 和 XML 文檔的庫
- lxml ---- 解析和處理 XML 和 HTML 的庫 ---- xpath專用,單從寫xpath表達式的感覺來說,要比BS4舒服,個人覺得😌
- re ---- 正則庫,用于匹配復雜文本
2.1.4 爬蟲框架
- Scrapy ---- 支持分布式和異步
- PySider ---- 輕量級爬蟲框架
- Crawlab ---- 支持可視化監控和管理
2.2 反爬技術
ChatGPT搜的,作為小白,目前接觸到的最多的就是UA、cookie和Referer檢查(驗證碼除外),不過有一次批量爬取豆瓣數據,IP被封禁了幾個月😭
2.2.1 IP 封禁
描述: 當同一 IP 地址在短時間內發送過多請求時,網站會將其列入黑名單,拒絕其后續請求。
作用: 有效防止短時間內發送大量請求的爬蟲。
2.2.2. 速率限制
描述: 服務器限制來自特定 IP 地址的請求速率,如每秒最多允許的請求次數。
作用: 通過限制請求頻率,降低爬蟲成功抓取數據的效率。
2.2.3. User-Agent 驗證
描述: 網站會檢查請求中的 User-Agent 字段,識別是否為瀏覽器或爬蟲。常見的爬蟲工具有特定的 User-Agent。
作用: 拒絕或屏蔽常見的爬蟲 User-Agent,以防止自動化訪問。
2.2.4. Cookie 驗證
描述: 一些網站通過設置 Cookie 來跟蹤用戶,并要求用戶在訪問時帶上特定的 Cookie。
作用: 只有正確設置了 Cookie 的請求才能通過,爬蟲如果無法管理 Cookie,會受到限制。
2.2.5. 驗證碼(CAPTCHA)
描述: 通過要求用戶完成驗證碼(如輸入扭曲文字、選擇圖片等)來驗證是否為人類用戶。
作用: 有效阻止自動化程序的訪問,因為爬蟲通常無法通過這些驗證。
2.2.6. JavaScript 渲染
描述: 一些網站使用 JavaScript 動態生成內容,只在用戶的瀏覽器中渲染數據,而爬蟲無法解析 JavaScript。
作用: 防止爬蟲直接抓取靜態 HTML。
2.2.7. 動態內容加載(AJAX)
描述: 使用 AJAX 技術異步加載數據,因此一開始加載的頁面上沒有完整的數據,這需要發送額外請求。
作用: 爬蟲需要模擬這些請求才能獲得完整數據,增加了抓取的復雜性。
2.2.8. 反序列化檢測
描述: 網站會檢測請求的結構與正常用戶行為的差異,監控是否有異常的請求模式。
作用: 識別通過特殊方式反序列化請求的爬蟲。
2.2.9. HTML 結構改變
描述: 頻繁改變網站的 HTML 結構或 URL 規則,使得爬蟲在抓取過程中常常無法獲取到數據。
作用: 迫使爬蟲不斷更新爬取邏輯,增加維護成本。
2.2.10. IP 地理位置分析
描述: 根據訪問者的 IP 地址分析其地理位置,如果請求來自不同的地區,可能會被限制。
作用: 限制數據訪問到某些特定地區的爬蟲。
2.2.11. 內容加密或動態內容
描述: 網站可能會將某些頁面內容加密,或依賴于用戶操作才能呈現的內容(如按鈕點擊后展示的數據)。
作用: 使得爬蟲無法直接獲取內容。
2.2.12. 請求偽造檢測
描述: 通過比對請求的來源、原始地址、請求引用(Referer)等,來檢測是否為偽造請求。
作用: 識別出那些不是通過正常入站線路訪問的請求。
2.2.13. 頁面行為監測
描述: 監測用戶在頁面上的行為(如鼠標移動、點擊頻率等),非真實用戶的行為模式會觸發監測。
作用: 識別出機器人行為并攔截相關請求。
2.2.14. IP 輪換檢測
描述: 若大量請求來自不同 IP 但行為模式相似,服務器可能會將其視為爬蟲行為檢測。
作用: 通過行為模式識別抓取工具。
2.2.15. DNS 誤導
描述: 通過將請求重定向到虛假的 DNS 地址,進而攔截請求。
作用: 直接影響爬蟲的請求路徑。
2.2.16. HTTP Referer 檢查
描述: 檢測請求中 Referer 字段,確保請求來自合法的網頁來源。
作用:阻止爬蟲通過直接請求 URL 而繞過正常的頁面導航。
2.2.17. 實時監控和分析
描述: 利用工具和技術實時監控流量,分析異常模式并采取措施。
作用: 及時識別并阻止爬蟲的攻擊。
2.3 數據存儲
2.3.1 文本文件
- Json
- Html
- Csv
- openxl
2.3.2 數據庫
- Mysql
- SQLite
- MongoDB
- PyMysq庫
2.4 數據處理
嗯。。。😯最好掌握一下,畢竟數據清洗也是必不可少的一個環節,實際工作中不光需要拿到數據就可以了,基本都要進行數據分析
2.4.1 Numpy
簡介: NumPy 是一個用于科學計算的基礎庫,支持高性能的多維數組和矩陣操作。
特點:
- 提供強大的數組對象 N-dimensional array (ndarray)
- 支持數學函數和線性代數運算
2.4.2 Pandas
簡介: Pandas 是一個強大的數據處理和分析庫,特別適用于條件數據操作、數據清洗、統計分析等任務。
特點:
- 提供 DataFrame 和 Series 數據結構
- 支持數據讀取(如 CSV、Excel)、數據清洗和轉換
- 提供豐富的數據操作功能,如分組、合并、連接等
2.4.3 Excel表
想了想還是加了Excel,畢竟實際工作中說不定可能會使用Excel表分析展示數據,畢竟老板👵喜歡💗(比如我公司需求就是,測試工具處理數據后生成的測試報告都是要展示成Excel表形式反饋的)
不要小看Excel,就那些宏和函數,也夠頭疼的,玩好了也是大佬級別的存在🧍?♂?
2.5 數據可視化
數據處理完了,就要展示給boss👵看了,當然,我工作中用的最多的還是Matplotlib,把折線趨勢圖往Excel表里一丟,測試報告,成了?
2.5.1 Matplotlib
簡介: Matplotlib 是一個基礎的數據可視化庫,支持生成多種類型的靜態、動態、交互式圖表。
特點:
- 靈活性高,支持自定義圖表的各個方面
- 提供多種繪圖類型(如折線圖、散點圖、柱狀圖等)
2.5.2 Seaborn
簡介: Seaborn 是基于 Matplotlib 的高級可視化庫,提供了更為美觀和易用的圖表。
特點:
- 對統計數據的可視化特別友好
- 提供內置的主題和顏色調色板
2.5.3 Plotly
簡介: Plotly 是一個用于創建交互式圖表的庫,支持多種圖形類型。
特點:
- 支持豐富的交互功能
- 可以生成 Web 圖表并嵌入到 Web 應用中
2.6 圖像識別
這個我。。。反正多學點不吃虧,之前用OCR技術識別驗證碼,可是Fail?率挺高的,而且遇到稍微復雜一點點的驗證碼,比如說中間加了一條,就瘋狂Fail!!!有人教唆我用Tensorflow訓練一個驗證碼識別模型。。。但。。。我不會,哈哈哈,不管了,先掛上再說
對于點點點,最簡單解決驗證碼方式就是 ---- 喂!來給俺把測試環境驗證碼先給注掉!俺要跑一遍自動化!
2.6.1 openCV
簡介: OpenCV(Open Source Computer Vision Library)是一個開源的計算機視覺和機器學習軟件庫,提供了多種圖像處理和計算機視覺功能。
功能:
- 圖像讀取與寫入
- 圖像變換(平滑、濾波、邊緣檢測等)
- 特征檢測(如 SIFT、SURF、ORB)
- 編寫簡單的圖像處理腳本
2.6.2 Pillow
簡介: Pillow 是 Python Imaging Library(PIL)的一個分支,提供圖像處理工具,支持圖像操作的簡化。
功能:
- 圖像打開、保存、裁剪、調整大小
- 圖像濾鏡和效果
- 處理圖像的文本和矩形
2.6.3 TensorFlow 和 Keras
簡介: TensorFlow 是一個開源的深度學習框架,而 Keras 是一個高層次的神經網絡 API,能夠與 TensorFlow 等后臺框架一起使用。
功能:
- 訓練和部署深度學習模型,尤其是卷積神經網絡(CNN)
- 使用預訓練模型進行遷移學習
- 支持圖像分類、目標檢測、圖像生成等
2.6.4 PyTorch
簡介: PyTorch 是一個流行的開源深度學習框架,較 TensorFlow 更加靈活,常用于研究和開發。
功能:
- 動態計算圖,易于調試
- 支持 CNN 和其他深度學習結構
- 目標檢測(如使用 torchvision)
2.6.5 Tesseract
簡介: Tesseract 是一個開源的 OCR 引擎,能夠從圖像中提取文本。
功能:
- 處理各種語言的字符識別
- 支持圖像預處理
2.7 網頁自動化庫
如果實在爬不到,只能上自動化工具來模擬了!!(這個我熟悉😌)
2.7.1 selenium
概述: Selenium 是一個廣泛使用的自動化測試工具,最初是用于 Web 應用程序的測試。
優點:
- 支持多種瀏覽器(如 Chrome、Firefox、Safari 等)。
- 提供了豐富的 API 以控制瀏覽器,如鼠標點擊、鍵盤輸入等。
2.7.2 Playwright
概述: Playwright 是一個相對較新的工具,旨在提供更快、更強大的瀏覽器自動化功能。
優點:
- 支持最新的瀏覽器特性(如 WebKit、Chromium 和 Firefox)。
- 允許多瀏覽器上下文的支持,能模擬不同類型的用戶會話。
- 更簡潔和強大的 API,相較于 Selenium 使用上更為靈活。
爬取移動應用程序(APP)涉及的技術和框架與傳統網頁爬蟲稍有不同,主要因為移動應用通常依賴于 API 和網絡服務,而不是直接對網頁進行抓取。以下是一些常用于抓取APP的庫或框架:
2.8 APP爬蟲
隨著APP的盛行,APP爬取技術也越來越重要,對于APP爬取技術,可以掌握一哈,嗯。。。新手小白我也不懂,先按ChatGPT給的大綱寫著,以后有不對的地方再修改
2.8.1 API 抓取
許多應用程序與后端 RESTful 或 GraphQL API 進行交互。可以使用以下庫來抓取它們
- Requests: Python 中非常常用的庫,用于發送 HTTP 請求并處理響應。
- Axios: 一個基于 Promise 的 JavaScript 庫,用于發送 HTTP 請求。
2.8.2 移動應用反向工程工具
- APKTool: 用于反編譯 APK 文件(Android 應用的包文件),分析和修改資源、Manifest 文件。
- JD-GUI / JADX用于反編譯 Java 字節碼,幫助用戶理解應用程序的邏輯和行為。
- Frida: 動態分析工具,可以在運行時攔截和修改函數調用。適用于 Android 和 iOS。
- Burp Suite用作 Web 應用程序安全測試工具,也可以用來攔截和分析移動應用的網絡請求。
2.8.3 APP自動化測試框架
- Appium: 一個開源的移動應用自動化測試框架,支持 Android 和 iOS,可以編寫測試腳本與應用交互。
- UIAutomator: Android 官方提供的 UI 測試框架,允許自動化操作。
- XCUITest: 蘋果官方提供的 iOS 測試框架。
2.8.4 監控網絡請求
- Charles Proxy: 一款強大的網絡調試代理,可抓取和查看移動應用的網絡請求。
- Fiddler: 另一款流行的網絡監控工具,支持 HTTPS 解密和攔截。
- Wireshark: 雖然主要用作網絡分析工具,但也可以用于捕獲和分析數據包。
2.8.5 模擬器和真機測試
在抓取和自動化測試移動應用時,可能需要使用模擬器或真實設備:
- Android Studio Emulator: Android 官方的模擬器,可以用于測試和抓取 Android 應用。
- Xcode Simulator: 蘋果官方的 iOS 模擬器,用于測試和抓取 iOS 應用。
真實設備: 有時使用真實設備進行測試會更可靠,特別是當應用對設備特性有特別依賴時。
2.9 抓包工具
做爬蟲時,需要監控、分析和調試網絡請求和響應,一款優秀的抓包工具也是必不可少的,當然F12也行,但是使用專業抓包工具會更舒心!個人更喜歡Fiddler,可能是工作中使用的就是Fiddler,用順手了
-
Fiddler: Fiddler 是一個強大的 Web 調試代理,可記錄 HTTP(S) 流量。它適用于多種平臺,并且支持對請求和響應進行分析和修改。
-
Charles: Charles 是一款跨平臺的 Web 調試代理,功能類似于 Fiddler,它支持 HTTP 和 HTTPS 的請求捕獲及修改。
-
Wireshark: Wireshark 是一款強大的網絡協議分析工具,能夠捕獲和分析網絡數據包,適用于更底層的網絡通信分析。
-
Postman: Postman 是用于測試和調試 API 的工具,雖然它并不是傳統意義上的抓包工具,但它可以幫助用戶發送請求并查看響應。
2.10 高階爬蟲技術
實際上高不高階不知道,反正我沒怎么聽過的,就給它扔進高階中,畢竟是我寫的文檔,想怎么放就怎么放,哈哈哈。。。
2.10.1 JS 逆向
聽著就很高級,反正抖子上一搜,全是教逆向的直播或視頻,但我不會。。。
當網站使用 JavaScript 進行數據加載時,解析和逆向理解這些腳本是非常重要的。技術包括:
- 靜態分析: 分析 JavaScript 代碼以了解數據的請求格式、API endpoints、參數等。
- 動態分析: 在瀏覽器中執行 JavaScript,并監視網絡請求,捕獲 API 響應。
2.10.2 WebSockets 抓取
一些網站使用 WebSocket 進行實時數據傳輸。抓取此類數據需要:
- 使用 WebSocket 客戶端庫(如 websocket 模塊)來連接和監聽服務端發送的數據。
- 分析 WebSocket 消息格式以提取所需數據。
2.10.3 Captcha 繞過
What???
許多網站會使用 CAPTCHA 來防止自動化請求,處理此類問題可以使用:
- 第三方 CAPTCHA 解決服務: 如 2Captcha、Anti-Captcha。
- 機器學習算法: 自己構建模型來識別常見的 CAPTCHA 類型(如簡單的文字干擾)。
2.10.4 反向代理和 IP 輪換
爬蟲怕IP被封經常用到代理,但是為什么在高階爬蟲里?因為一個優秀的、穩定的代理IP,要花錢💰,要錢的東西就是高級的東西
- 代理池: 使用多個 IP 地址的代理服務,輪換請求來源 IP。
- 動態代理: 根據訪問頻率和封禁狀態自動切換或更新代理 IP。
2.10.5 分布式爬蟲架構
- 使用爬蟲框架: 如 Scrapy、CrawlSpider,結合分布式任務隊列(如 Celery、RabbitMQ)。
- 數據存儲優化: 使用分布式數據庫(如 MongoDB、Cassandra)。
2.10.6 智能爬蟲(AI/ML 輔助)
萬物皆AI是吧
結合機器學習和 AI 技術,提升數據抓取的效率與智能:
- 異常檢測: 使用機器學習模型檢測和識別網站的反爬措施。
- 智能內容抓取: 基于內容相似性或上下文自動選擇抓取目標。
2.10.7 瀏覽器無頭模式
測試自動化也用,可大大增加UI自動化測試效率
- 無頭瀏覽器: 如 Puppeteer、Playwright,可以在服務器上運行,減少資源消耗而不影響抓取效果。
2.selenium設置無頭模式: 啟用handless即可
2.11 雜七雜八
2.11.1 數據結構和算法
什么都數據結構!!!什么都算法!!!但是。。。會這倆玩意工資💰真的可以翻一翻,而且大型架構算法優化很重要,所以先掛上吃灰
2.11.2 互聯網協議
搞爬蟲對于協議當然必須掌握,不僅是爬蟲哈,只要與web相關的都需要,建議有時間的時候把計算機四大件啃掉!!!
- HTTP/HTTPS
- UDP/TCP
爬蟲總括先總結這么多,少了后續再補。當然,最重要的一點是:一定遵守robot君子協議!!(當然,我就說說,爬蟲第一課肯定先把君子協議注釋掉的,不然咋爬?爬不到啊!!)