爬蟲就是請求網站並提取數據的自動化程序。其中請求,提取,自動化是爬蟲的關鍵!下面咱們分析爬蟲的基本流程html
發起請求
經過HTTP庫向目標站點發起請求,也就是發送一個Request,請求能夠包含額外的header等信息,等待服務器響應mysql
獲取響應內容
若是服務器能正常響應,會獲得一個Response,Response的內容即是所要獲取的頁面內容,類型多是HTML,Json字符串,二進制數據(圖片或者視頻)等類型web
解析內容
獲得的內容多是HTML,能夠用正則表達式,頁面解析庫進行解析,多是Json,能夠直接轉換爲Json對象解析,多是二進制數據,能夠作保存或者進一步的處理ajax
保存數據
保存形式多樣,能夠存爲文本,也能夠保存到數據庫,或者保存特定格式的文件正則表達式
瀏覽器發送消息給網址所在的服務器,這個過程就叫作HTPP Requestsql
服務器收到瀏覽器發送的消息後,可以根據瀏覽器發送消息的內容,作相應的處理,而後把消息回傳給瀏覽器,這個過程就是HTTP Response數據庫
瀏覽器收到服務器的Response信息後,會對信息進行相應的處理,而後展現瀏覽器
請求方式服務器
主要有:GET/POST兩種類型經常使用,另外還有HEAD/PUT/DELETE/OPTIONS
GET和POST的區別就是:請求的數據GET是在url中,POST則是存放在頭部網絡
GET:向指定的資源發出「顯示」請求。使用GET方法應該只用在讀取數據,而不該當被用於產生「反作用」的操做中,例如在Web Application中。其中一個緣由是GET可能會被網絡蜘蛛等隨意訪問
POST:向指定資源提交數據,請求服務器進行處理(例如提交表單或者上傳文件)。數據被包含在請求本文中。這個請求可能會建立新的資源或修改現有資源,或兩者皆有。
HEAD:與GET方法同樣,都是向服務器發出指定資源的請求。只不過服務器將不傳回資源的本文部分。它的好處在於,使用這個方法能夠在沒必要傳輸所有內容的狀況下,就能夠獲取其中「關於該資源的信息」(元信息或稱元數據)。
PUT:向指定資源位置上傳其最新內容。
OPTIONS:這個方法可以使服務器傳回該資源所支持的全部HTTP請求方法。用'*'來代替資源名稱,向Web服務器發送OPTIONS請求,能夠測試服務器功能是否正常運做。
DELETE:請求服務器刪除Request-URI所標識的資源。
請求URL
URL,即統一資源定位符,也就是咱們說的網址,統一資源定位符是對能夠從互聯網上獲得的資源的位置和訪問方法的一種簡潔的表示,是互聯網上標準資源的地址。互聯網上的每一個文件都有一個惟一的URL,它包含的信息指出文件的位置以及瀏覽器應該怎麼處理它。
URL的格式由三個部分組成:
第一部分是協議(或稱爲服務方式)。
第二部分是存有該資源的主機IP地址(有時也包括端口號)。
第三部分是主機資源的具體地址,如目錄和文件名等。
爬蟲爬取數據時必需要有一個目標的URL才能夠獲取數據,所以,它是爬蟲獲取數據的基本依據。
請求頭
包含請求時的頭部信息,如User-Agent,Host,Cookies等信息,下圖是請求請求百度時,全部的請求頭部信息參數
請求體
請求是攜帶的數據,如提交表單數據時候的表單數據(POST)
全部HTTP響應的第一行都是狀態行,依次是當前HTTP版本號,3位數字組成的狀態代碼,以及描述狀態的短語,彼此由空格分隔。
響應狀態
有多種響應狀態,如:200表明成功,301跳轉,404找不到頁面,502服務器錯誤
響應頭
如內容類型,類型的長度,服務器信息,設置Cookie,以下圖
響應體
最主要的部分,包含請求資源的內容,如網頁HTMl,圖片,二進制數據等
網頁文本:如HTML文檔,Json格式化文本等
圖片:獲取到的是二進制文件,保存爲圖片格式
視頻:一樣是二進制文件
其餘:只要請求到的,均可以獲取
出現這種狀況是由於,不少網站中的數據都是經過js,ajax動態加載的,因此直接經過get請求獲取的頁面和瀏覽器顯示的不一樣。
如何解決js渲染的問題?
分析ajax
Selenium/webdriver:
Splash
PyV8,Ghost.py
文本:純文本,Json,Xml等
關係型數據庫:如mysql,oracle,sql server等結構化數據庫
非關係型數據庫:MongoDB,Redis等key-value形式存儲
二進制文件:如圖片、視頻、音頻、等等直接保存成特殊格式便可
原文:http://www.javashuo.com/article/p-xplyzbkr-kd.html