爬蟲基本原理
基本流程
- 發起請求
- 經過http庫向目標站點發起請求,即發送一個Request,請求能夠包含額外的headers等信息,等待服務器響應
- 獲取響應內容
- 若是服務器能正常響應,會獲得一個Response,Response的內容即是所要獲取的頁面內容,類型可能有HTML,json字符串,二進制(如圖片視頻)等類型。
- 解析內容
- 獲得的內容多是HTML,能夠用正則表達式,網頁解析庫進行解析,多是Json,多是二進制數據,能夠作保存或者進一步處理
- 保存數據
- 保存形式多樣,能夠存爲文本,也能夠保存至特定格式的文件。
Request與Response
- Request
- 瀏覽器就發送消息給該網址所在的服務器,這個過程叫HTTP Request
- 請求方式
- 主要有GET,POST兩種類型,HEAD,PUT,DELETE,OPTIONS等
- 請求URL
- URL全稱統一資源定位符,如一個網頁文檔,一張圖片,一個視頻等均可以用URL惟一來肯定
- 請求頭
- 包含請求時的頭部信息,如User-Agent,Host,Cookies等信息。
- 請求體
- Response
- 服務器收到瀏覽器發送的消息後,可以根據瀏覽器發送消息的內容,而後把消息回傳給瀏覽器。這個過程叫HTTP Response
- 響應狀態
- 有多種響應狀態,如200表明成功,301跳轉,404找不到頁面,502服務器錯誤
- 響應頭
- 如內容類型,內容長度,服務器信息,設置cookie等等
- 響應體
- 最主要的部分,包含了請求資源的內容,如HTML,圖片,二進制數據等。
抓取的數據
- 網頁文本: 如HTML文檔,Json格式文本
- 圖片:獲取的是二進制文件,保存爲圖片格式
- 視頻:同爲二進制文件,保存視頻格式便可
- 其餘:只要是能請求到的,都能獲取
解析方式
- 直接解析
- Json解析
- 正則表達式
- BeautifulSoup: 比正則更好用,更迅速,更快
- PyQuery
- XPath
抓到的數據和瀏覽器顯示不一致
請求到的頁面中包含了一些js腳本javascript
解決JavaScript渲染問題
- 分析Ajax請求
- Selenium/WebDriver
- Splash 模擬javascript渲染 github開源
- PyV8,Ghost.py
保存數據
- 文本: 純文本,json,xml等
- 關係型數據庫: 如mysql,oracle,SQL Server等具備結構化表格形式存儲
- 非關係型數據庫:如Mongodb,Redis等key-value形式存儲
- 二進制文件: 如圖片,視頻,音頻等直接保存稱特定格式便可