爬蟲的主要作用就是在網站互聯的大網上收集、分析各種網頁數據
工作原理也很簡單,給爬蟲一個URL,通過HTTP協議把HTML頁面下載下來,分析里面的元素,比如說表單、表格、鏈接等
因為HTML頁面是純文本的,可以把它形成一棵DOM樹,也可以使用正則表達式去獲取想要的東西。
最重要的事,拿到這個頁面的其他的鏈接,然后拿這些鏈接對應的HTML頁面,繼續分析,然后循環下去,把所有的頁面找出來。
所以一個爬蟲最基本的能力有:
- 通過HTTP協議訪問網頁
- 分析HTML網頁
## 反爬蟲
一般而言,如果在網站的根目錄下放一個robots.txt,里面定義好那些內容對爬蟲開放,當然這只是約定俗成的規范,而不是標準,所以總有爬蟲不守規范。
作為程序,爬蟲訪問起網絡來,比人類快很多,如果爬蟲很多,會給網站帶來非常大的流量,所以網站會想到很多辦法來**反爬蟲**
最開始的時候,爬蟲在發出HTTP請求的時候,沒有偽裝自己,不會修改User Agent,所以網競爭力可以很容易的禁止我們。
> User Agent其實就是HTTP Header的一個字符串,讓服務器能識別客戶端的操作系統及版本,瀏覽器及版本,瀏覽器引擎、語音等。可以針對性的返回桌面版或者手機版的網頁。
后來我們也可以把user Agent設置得和人類瀏覽器甚至偽裝成Goolge的爬蟲。
網站還可以分析我們的行為,比如說一秒之內有多少次請求,就認為是爬蟲。
## 陷阱、驗證碼
有些網站會在的網站發回的HTML頁面里面包含一些人類肉眼看不到的鏈接,人類看不到,所以不會點擊,但是爬蟲能分析所有的鏈接,所以會踩到陷阱里面去。
這樣,服務器就可以名正言順的**封IP**
還有一招就是驗證碼,如果一段時間訪問次數超過某個閾值,立刻顯示一個圖形驗證碼。現在驗證越來越復雜,就算使用OCR也不行。
我們可以做分布式,讓每個機器的爬蟲運行得慢一點,不要觸發封鎖策略。
還可以使用代理,讓IP不斷變化
網站還有一種策略是,識別出是爬蟲之后,返回一些假數據,和真實數據混在一起。
## selenium
隨著互聯網技術發展,現在訪問一個URL后,返回的HTML特別少,JS特別多,從HTML中幾乎找不到有用的東西。
原來,網站都用JS在瀏覽器端渲染了。
這些JS通過AJAX方式訪問后端網站的API,返回的都是JSON,只需要弄清API的輸入和輸出,直接調用API就可以拿到數據。
當時直接調用API的時候,也是有很多麻煩,比如需要進行認證,例如發個token
后來,干脆使用**無界面瀏覽器**,也就是內嵌瀏覽器,這個瀏覽器不需要界面顯示,可以程序中靜悄悄地執行。這樣,就可以相當于一個真正的人類在請求網頁,把JS下載下來,就在無界面瀏覽器中執行,等待渲染完了,就可以拿到HTML做后續的分析了