系列文章目錄
01 初始爬蟲
02 數據解析與提取
文章目錄
- 系列文章目錄
- 前言
- 1 爬蟲和Python
- 2 爬蟲的矛盾
- 2.1 爬蟲與反爬
- 2.2 robots
- 核心字段
- 重要規則說明
- 非標準擴展指令
- 協議生效條件
- 局限性
- 驗證工具
- 2.3 一個爬蟲demo
- 3 Web請求與HTTP協議
- 3.1 一個web請求的全過程
- 3.2 判斷頁面源代碼位置
- 3.3 HTTP 協議
- HTTP 請求
- HTTP 響應
- 3.4 requests 模塊入門
- 總結
前言
- Datawhale是一個專注于AI與數據科學的開源組織,匯集了眾多領域院校和知名企業的優秀學習者,聚合了一群有開源精神和探索精神的團隊成員
- 零基礎網絡爬蟲技術
1 爬蟲和Python
爬蟲就是通過編寫程序來爬取互聯網上的圖片、音頻、視頻、數據等。
- Python 是一門上手快、語法簡單的編程語言。
2 爬蟲的矛盾
2.1 爬蟲與反爬
-
首先,爬蟲在法律上不是被禁止的。
-
爬蟲分為:
- 善意爬蟲,不破壞被爬取的網站的資源,正常訪問,一般頻率不高,不竊取用戶隱私;
- 惡意爬蟲,影響?站的正常運營如搶票,秒殺,瘋狂請求?站資源造成?站宕機;
-
因此網站有了反爬機制,制定相應的策略或者技術手段,防止爬蟲程序進行網站數據的爬取。
-
爬蟲程序就有了反反爬策略,制定相關的策略或者技術手段,破解網站中具備的反爬機制。
-
最后,雙方制定君子協議:
robots 協議
。 -
根據協議,網站管理員可以在網站域名的根目錄下放一個
robots.txt
的文本文件,里面可以指定不同的網絡爬蟲能訪問的頁面和禁止訪問的頁面。網絡爬蟲在采集這個網站之前,首先獲取到這個文件,然后解析到其中的規則,最后根據規則來采集網站的數據。
2.2 robots
robots.txt
文件由一組規則組成,每組規則以User-agent
開頭,后接允許或禁止的路徑規則。
核心字段
- User-agent :指定規則適用的爬蟲名稱(如
*
表示所有爬蟲)。 - Disallow :指定禁止爬蟲訪問的路徑(路徑需為絕對路徑)。
- Allow :指定允許爬蟲訪問的路徑(某些搜索引擎支持,但非標準協議的一部分)。
- Sitemap :告知爬蟲網站的XML站點地圖位置(幫助索引內容)。
重要規則說明
- 路徑匹配 :
- 使用前綴匹配(如
Disallow: /admin
會禁止/admin/
、/admin.php
等)。 - 支持通配符(如
*
匹配任意字符,$
匹配路徑結尾,但需搜索引擎支持)。
- 使用前綴匹配(如
- 大小寫敏感 :路徑區分大小寫(如
/Images/
和/images/
是不同的)。 - 優先級 :
Allow
規則通常優先于Disallow
(若同時存在沖突規則)。 - 最長匹配原則 :當多條規則沖突時,選擇最長匹配的路徑規則。
非標準擴展指令
部分搜索引擎支持額外指令(非協議官方標準):
- Crawl-Delay :設置爬蟲抓取間隔(如
Crawl-Delay: 10
表示每10秒請求一次)。 - Host :指定首選域名(如
Host: www.example.com
)。 - Clean-param :聲明某些參數不影響頁面內容(如
Clean-param: sessionid /index.php
)。
協議生效條件
- 文件必須位于網站根目錄(如
https://www.example.com/robots.txt
)。 - 文件編碼需為 UTF-8 ,且無BOM頭。
- 遵循協議的爬蟲會遵守規則,但惡意爬蟲可能無視協議。
局限性
- 不保證隱私 :
robots.txt
無法阻止直接訪問,敏感內容需通過身份驗證或其他方式保護。 - 動態URL處理 :無法完全阻止參數生成的動態頁面被爬取。
- 緩存延遲 :爬蟲可能不會實時更新規則,需等待重新抓取。
驗證工具
- Google Search Console、Bing Webmaster Tools 提供
robots.txt
測試功能。 - 在線工具(如 Robots.txt Checker )可驗證規則是否正確。
2.3 一個爬蟲demo
- 獲取百度首頁
3 Web請求與HTTP協議
3.1 一個web請求的全過程
3.2 判斷頁面源代碼位置
- 上面是服務器渲染,即服務器直接把數據全部寫入到html中。
- 下面是客戶端渲染,?般是第?次請求服務器返回?堆HTML框架結構。然后再次請求到真正保存數據的服務器,由這個服務器返回數據,最后在瀏覽器上對數據進?加載。
3.3 HTTP 協議
協議:就是兩個計算機之間為了能夠流暢的進?溝通?設置的?個君?協定。
- 常?的協議有TCP/IP,SOAP協議,HTTP協議,SMTP協議等等。
HTTP協議:Hyper Text Transfer Protocol(超?本傳輸協議)的縮寫,是?于從萬維?(WWW:World Wide Web )服務器傳輸超?本到本地瀏覽器的傳送協議。
HTTP 請求
- 有三塊內容:
- 請求? -> 請求?式(get/post) 請求url地址 協議
- 請求頭 -> 放?些服務器要使?的附加信息
- 請求體 -> ?般放?些請求參數
請求?式:
-
GET
: 顯示提交 -
POST
: 隱示提交 -
請求頭中最常?的?些重要內容(爬?需要):
User-Agent
:請求載體的身份標識(?啥發送的請求)Referer
:防盜鏈(這次請求是從哪個??來的?反爬會?到)cookie
:本地字符串數據信息(?戶登錄信息,反爬的token)
HTTP 響應
- 也有三塊內容:
- 狀態? -> 協議 狀態碼
- 響應頭 -> 放?些客戶端要使?的?些附加信息
- 響應體 -> 服務器返回的真正客戶端要?的
- 響應頭中?些重要的內容:
Content-Type
:返回內容的內容類型,比如Content-Type: text/html; charset=utf-8
- 各種神奇的莫名其妙的字符串(這個需要經驗了,?般都是token字樣,防?各種攻擊和反爬)
3.4 requests 模塊入門
- 常?的抓取??的模塊通常使??個?
urllib
還要簡單的第三?模塊requests
。
總結
- Python爬蟲的入門介紹。