符號(hào)表解釋:
可根據(jù)知識(shí)點(diǎn)前的符號(hào)按需選學(xué),并獲取知識(shí)點(diǎn)描述和學(xué)習(xí)資源。
必學(xué):核?知識(shí)點(diǎn),經(jīng)常?到。
建議學(xué):重要知識(shí)點(diǎn),專業(yè)??的基?。
?試重點(diǎn):經(jīng)常出現(xiàn)的?試知識(shí)點(diǎn)。
可有可?:邊緣區(qū)域,不是必須探索的地?。
知識(shí)描繪:知識(shí)點(diǎn)描述,快速理解。
學(xué)習(xí)資源:關(guān)聯(lián)的學(xué)習(xí)資源。
學(xué)習(xí)?標(biāo):階段性?標(biāo)。
學(xué)習(xí)路線:爬蟲
一、爬蟲基礎(chǔ)
1. 爬蟲概述:
描述: 自動(dòng)化程序,用于從網(wǎng)頁(yè)提取信息和數(shù)據(jù)。
目標(biāo)案例: 新聞聚合器 (利用 Scrapy 爬取不同新聞網(wǎng)站的新聞,整合到一個(gè)平臺(tái))。
學(xué)習(xí)資源:
Python Scrapy 爬蟲入門到實(shí)戰(zhàn) >>>
Python 爬蟲示例(實(shí)戰(zhàn)) >>>
Python 模擬登錄(實(shí)戰(zhàn)) >>>
2. 爬蟲合法性: (必須學(xué)習(xí),避免法律風(fēng)險(xiǎn))
- 知識(shí)產(chǎn)權(quán):避免侵犯網(wǎng)站知識(shí)產(chǎn)權(quán)(數(shù)據(jù)、文字、圖片、音視頻等)。
- 網(wǎng)絡(luò)安全法:遵守中國(guó)網(wǎng)絡(luò)安全法律法規(guī),禁止網(wǎng)絡(luò)攻擊、破解、竊取、篡改等違法活動(dòng)。
- 隱私保護(hù):不擅自收集、存儲(chǔ)、傳播他人個(gè)人隱私信息(身份證號(hào)、手機(jī)號(hào)等)。
- 網(wǎng)站規(guī)則:遵守各網(wǎng)站的爬蟲規(guī)則,尊重 robots.txt 文件。
- 合同和協(xié)議:遵守網(wǎng)站提供的 API 或其他爬取協(xié)議。
- 公序良俗:不傳播違法、淫穢、暴力等有害信息。
二、數(shù)據(jù)抓取
1. 常用網(wǎng)絡(luò)協(xié)議 (HTTP/HTTPS):
- HTTP: 用于 Web 數(shù)據(jù)傳輸?shù)膮f(xié)議,定義客戶端和服務(wù)器通信規(guī)則。
- HTTPS: HTTP 的安全版本,使用 SSL/TLS 加密數(shù)據(jù)傳輸。
2. HTTP 請(qǐng)求:
- 學(xué)習(xí)資源>>>
- 請(qǐng)求頭: 包含請(qǐng)求元數(shù)據(jù) (請(qǐng)求方法、目標(biāo) URL、用戶代理、請(qǐng)求時(shí)間等)。
- 請(qǐng)求參數(shù): 傳遞給服務(wù)器的數(shù)據(jù) (GET 請(qǐng)求在 URL 中,POST 請(qǐng)求在請(qǐng)求體中)。
- 請(qǐng)求類型: GET、POST、PUT、DELETE 等。
3. HTTP 響應(yīng):
- 響應(yīng)頭: 包含響應(yīng)元數(shù)據(jù) (響應(yīng)狀態(tài)碼、響應(yīng)時(shí)間、服務(wù)器信息等)。
- 響應(yīng)參數(shù): 服務(wù)器返回的數(shù)據(jù) (網(wǎng)頁(yè)內(nèi)容、JSON 數(shù)據(jù)、圖片等)。
4. Requests 模塊: (流行的第三方庫(kù),易于使用)
- 描述: 提供易于使用的 API 發(fā)送 HTTP 請(qǐng)求和處理響應(yīng) (GET、POST 等)。
學(xué)習(xí)資源:
Python Requests 權(quán)威指南 >>>
5. urllib 模塊: (Python 標(biāo)準(zhǔn)庫(kù),功能相對(duì)簡(jiǎn)單)
- 描述: 提供基本的 HTTP 請(qǐng)求功能,無(wú)需額外安裝。
- 學(xué)習(xí)資源 >>>
三、模擬登錄
- 使用 Requests 庫(kù): 發(fā)送登錄請(qǐng)求,提交用戶名和密碼,處理 Cookie 保持登錄狀態(tài)。
- 使用 Selenium 庫(kù): 自動(dòng)化瀏覽器操作,模擬用戶交互完成登錄 (適用于 JavaScript 生成的表單)。
四、網(wǎng)站抓取
1. 靜態(tài)網(wǎng)站抓取:
- 使用 Requests 庫(kù): 發(fā)送 GET 請(qǐng)求,獲取 HTML 響應(yīng),使用解析庫(kù) (如 BeautifulSoup) 提取數(shù)據(jù)。
- 使用 Scrapy 框架: 適用于爬取多個(gè)頁(yè)面或網(wǎng)站,提供高級(jí)功能 (自動(dòng)化頁(yè)面遍歷、數(shù)據(jù)存儲(chǔ)、異步請(qǐng)求)。
2. 動(dòng)態(tài)網(wǎng)站抓取:
- 使用 Selenium 庫(kù): 自動(dòng)化瀏覽器,等待頁(yè)面加載完成,提取數(shù)據(jù)。
- 使用無(wú)頭瀏覽器: (如 Puppeteer, Playwright) 渲染 JavaScript 并提取內(nèi)容。
五、無(wú)頭瀏覽器
1. Selenium: 自動(dòng)化測(cè)試工具,模擬用戶在 Web 應(yīng)用中的操作,支持多種編程語(yǔ)言和瀏覽器。
2. Puppeteer: Node.js 庫(kù),控制 Chrome 或 Chromium 瀏覽器進(jìn)行自動(dòng)化操作 (Web 抓取、測(cè)試、生成 PDF 等)。
六、數(shù)據(jù)解析
1. 常用標(biāo)簽 (HTML/XML): 基本的數(shù)據(jù)解析方法,通過標(biāo)簽名稱、屬性、層級(jí)結(jié)構(gòu)定位和提取數(shù)據(jù)。
2. BeautifulSoup: Python 庫(kù),解析 HTML 和 XML,提供易于使用的 API 遍歷文檔樹和提取數(shù)據(jù)。
3. 正則表達(dá)式: 強(qiáng)大的文本模式匹配工具,適用于簡(jiǎn)單的數(shù)據(jù)提取任務(wù)。
4. XPath: 在 XML 文檔中定位和提取數(shù)據(jù)的語(yǔ)言,Python 中可使用 lxml 庫(kù)處理。
七、數(shù)據(jù)導(dǎo)出
1. 文件:
- Excel: 使用 openpyxl 或 pandas 庫(kù)導(dǎo)出到 Excel 文件。
- CSV: 使用 Python 內(nèi)置庫(kù) csv 保存為 CSV 格式。
2. 數(shù)據(jù)庫(kù):
- MongoDB: NoSQL 數(shù)據(jù)庫(kù),使用 pymongo 庫(kù)存儲(chǔ)數(shù)據(jù)。
- MySQL: 關(guān)系型數(shù)據(jù)庫(kù),使用 mysql-connector 或其他 MySQL 連接庫(kù)。
八、中間件
- Redis: 內(nèi)存數(shù)據(jù)庫(kù),用于緩存和快速存儲(chǔ)臨時(shí)數(shù)據(jù),使用 redis-py 庫(kù)。
九、Scrapy 框架
1. 核心概念:
- 命令行工具: 創(chuàng)建、運(yùn)行、調(diào)試和管理爬蟲項(xiàng)目 (scrapy startproject, scrapy crawl, scrapy shell 等)。
- Spiders (爬蟲): 定義如何抓取網(wǎng)站的結(jié)構(gòu)和行為 (繼承 scrapy.Spider 類)。
- Selectors (選擇器): 從 HTML 或 XML 文檔中提取數(shù)據(jù) (XPath 和 CSS 選擇器)。
- Items (數(shù)據(jù)項(xiàng)): 結(jié)構(gòu)化和存儲(chǔ)從網(wǎng)頁(yè)提取的數(shù)據(jù) (用戶自定義的 Python 字典或類)。
- Item Loaders (數(shù)據(jù)加載器): 填充 Items,處理數(shù)據(jù)清洗、轉(zhuǎn)換和預(yù)處理。
- Pipelines (管道): 處理爬取的數(shù)據(jù) (存儲(chǔ)、清洗、驗(yàn)證、導(dǎo)出等)。
- Scrapy Shell: 交互式工具,測(cè)試和調(diào)試 Scrapy 爬蟲。
- Link Extractors (鏈接提取器): 從頁(yè)面中提取鏈接 (例如 LinkExtractor)。
2. 調(diào)度器: 管理爬蟲的任務(wù)隊(duì)列,控制爬取流程和順序。
3. 分布式爬蟲: 將爬蟲任務(wù)分散到多個(gè)節(jié)點(diǎn)或機(jī)器上,提高效率、速度和容錯(cuò)性。
4. 部署: 將爬蟲系統(tǒng)部署到生產(chǎn)環(huán)境中運(yùn)行。
十、并發(fā)異步爬蟲
- aiohttp: 基于 asyncio 的異步 HTTP 請(qǐng)求庫(kù),構(gòu)建高性能、可伸縮的 Web 服務(wù)和應(yīng)用。
- asyncio: Python 標(biāo)準(zhǔn)庫(kù),提供對(duì)異步編程的支持 (異步 I/O、協(xié)程和任務(wù))。
十一、高級(jí)爬蟲技術(shù)
- IP 代理: 隱藏真實(shí) IP 地址,繞過訪問限制,提高爬取速度和匿名性。
- 驗(yàn)證碼識(shí)別: 使用圖像處理、機(jī)器學(xué)習(xí)或深度學(xué)習(xí)技術(shù) (如 CNN) 自動(dòng)識(shí)別和破解驗(yàn)證碼。
- APP 抓取: 模擬移動(dòng)應(yīng)用的請(qǐng)求和交互獲取數(shù)據(jù) (使用 Charles、Fiddler 等抓包工具)。
- 增量式爬蟲: 只爬取自上次爬取以來(lái)有更新的數(shù)據(jù),提高效率。
十二、反爬蟲技術(shù)
- 請(qǐng)求頭限制: 限制或檢查 HTTP 請(qǐng)求的頭部信息 (User-Agent, Referer 等)。
- 驗(yàn)證碼: 識(shí)別用戶是否為人類的機(jī)制。
- 黑白名單: 控制訪問,阻止或允許特定用戶或 IP 地址訪問網(wǎng)站。
- 封禁 IP: 根據(jù)惡意行為封禁特定 IP 地址。
- 數(shù)據(jù)加密: 將數(shù)據(jù)轉(zhuǎn)換為不可讀的形式。
- 數(shù)據(jù)混淆: 改變數(shù)據(jù)的格式或結(jié)構(gòu),使其難以理解或解析。
- 行為分析: 監(jiān)控和分析用戶或爬蟲的行為,檢測(cè)異常活動(dòng)。