初始爬蟲(二)
在上文中我們說了:爬蟲就是請求網站並提取資料的自動化程式。其中請求,提取,自動化是爬蟲的關鍵!下面我們分析爬蟲的基本流程
爬蟲的基本流程
發起請求
通過HTTP庫向目標站點發起請求,也就是傳送一個Request,請求可以包含額外的header等資訊,等待伺服器響應
獲取響應內容
如果伺服器能正常響應,會得到一個Response,Response的內容便是所要獲取的頁面內容,型別可能是HTML,Json字串,二進位制資料(圖片或者視訊)等型別
解析內容
得到的內容可能是HTML,可以用正則表示式,頁面解析庫進行解析,可能是Json,可以直接轉換為Json物件解析,可能是二進位制資料,可以做儲存或者進一步的處理
儲存資料
儲存形式多樣,可以存為文字,也可以儲存到資料庫,或者儲存特定格式的檔案
什麼是Request,Response
瀏覽器傳送訊息給網址所在的伺服器,這個過程就叫做HTPP Request
伺服器收到瀏覽器傳送的訊息後,能夠根據瀏覽器傳送訊息的內容,做相應的處理,然後把訊息回傳給瀏覽器,這個過程就是HTTP Response
瀏覽器收到伺服器的Response資訊後,會對資訊進行相應的處理,然後展示
Request中包含什麼?
請求方式
主要有: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)
Response中包含了什麼
所有HTTP響應的第一行都是狀態行,依次是當前HTTP版本號,3位數字組成的狀態程式碼,以及描述狀態的短語,彼此由空格分隔。
響應狀態
有多種響應狀態,如:200代表成功,301跳轉,404找不到頁面,502伺服器錯誤
- 1xx訊息——請求已被伺服器接收,繼續處理
- 2xx成功——請求已成功被伺服器接收、理解、並接受
- 3xx重定向——需要後續操作才能完成這一請求
- 4xx請求錯誤——請求含有詞法錯誤或者無法被執行
- 5xx伺服器錯誤——伺服器在處理某個正確請求時發生錯誤 常見程式碼: 200 OK 請求成功 400 Bad Request 客戶端請求有語法錯誤,不能被伺服器所理解 401 Unauthorized 請求未經授權,這個狀態程式碼必須和WWW-Authenticate報頭域一起使用 403 Forbidden 伺服器收到請求,但是拒絕提供服務 404 Not Found 請求資源不存在,eg:輸入了錯誤的URL 500 Internal Server Error 伺服器發生不可預期的錯誤 503 Server Unavailable 伺服器當前不能處理客戶端的請求,一段時間後可能恢復正常 301 目標永久性轉移 302 目標暫時性轉移
響應頭
如內容型別,型別的長度,伺服器資訊,設定Cookie,如下圖
響應體
最主要的部分,包含請求資源的內容,如網頁HTMl,圖片,二進位制資料等
能爬取什麼樣的資料
網頁文字:如HTML文件,Json格式化文字等
圖片:獲取到的是二進位制檔案,儲存為圖片格式
視訊:同樣是二進位制檔案
其他:只要請求到的,都可以獲取
如何解析資料
- 直接處理
- Json解析
- 正則表示式處理
- BeautifulSoup解析處理
- PyQuery解析處理
- XPath解析處理
關於抓取的頁面資料和瀏覽器裡看到的不一樣的問題
出現這種情況是因為,很多網站中的資料都是通過js,ajax動態載入的,所以直接通過get請求獲取的頁面和瀏覽器顯示的不同。
如何解決js渲染的問題?
分析ajax
Selenium/webdriver
Splash
PyV8,Ghost.py
怎樣儲存資料
文字:純文字,Json,Xml等
關係型資料庫:如mysql,oracle,sql server等結構化資料庫
非關係型資料庫:MongoDB,Redis等key-value形式儲存
在上文中我們說了:爬蟲就是請求網站並提取資料的自動化程式。其中請求,提取,自動化是爬蟲的關鍵!下面我們分析爬蟲的基本流程
爬蟲的基本流程
發起請求
通過HTTP庫向目標站點發起請求,也就是傳送一個Request,請求可以包含額外的header等資訊,等待伺服器響應
獲取響應內容
如果伺服器能正常響應,會得到一個Response,Response的內容便是所要獲取的頁面內容,型別可能是HTML,Json字串,二進位制資料(圖片或者視訊)等型別
解析內容
得到的內容可能是HTML,可以用正則表示式,頁面解析庫進行解析,可能是Json,可以直接轉換為Json物件解析,可能是二進位制資料,可以做儲存或者進一步的處理
儲存資料
儲存形式多樣,可以存為文字,也可以儲存到資料庫,或者儲存特定格式的檔案
什麼是Request,Response
瀏覽器傳送訊息給網址所在的伺服器,這個過程就叫做HTPP Request
伺服器收到瀏覽器傳送的訊息後,能夠根據瀏覽器傳送訊息的內容,做相應的處理,然後把訊息回傳給瀏覽器,這個過程就是HTTP Response
瀏覽器收到伺服器的Response資訊後,會對資訊進行相應的處理,然後展示
Request中包含什麼?
請求方式
主要有: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)
Response中包含了什麼
所有HTTP響應的第一行都是狀態行,依次是當前HTTP版本號,3位數字組成的狀態程式碼,以及描述狀態的短語,彼此由空格分隔。
響應狀態
有多種響應狀態,如:200代表成功,301跳轉,404找不到頁面,502伺服器錯誤
- 1xx訊息——請求已被伺服器接收,繼續處理
- 2xx成功——請求已成功被伺服器接收、理解、並接受
- 3xx重定向——需要後續操作才能完成這一請求
- 4xx請求錯誤——請求含有詞法錯誤或者無法被執行
- 5xx伺服器錯誤——伺服器在處理某個正確請求時發生錯誤 常見程式碼: 200 OK 請求成功 400 Bad Request 客戶端請求有語法錯誤,不能被伺服器所理解 401 Unauthorized 請求未經授權,這個狀態程式碼必須和WWW-Authenticate報頭域一起使用 403 Forbidden 伺服器收到請求,但是拒絕提供服務 404 Not Found 請求資源不存在,eg:輸入了錯誤的URL 500 Internal Server Error 伺服器發生不可預期的錯誤 503 Server Unavailable 伺服器當前不能處理客戶端的請求,一段時間後可能恢復正常 301 目標永久性轉移 302 目標暫時性轉移
響應頭
如內容型別,型別的長度,伺服器資訊,設定Cookie,如下圖
響應體
最主要的部分,包含請求資源的內容,如網頁HTMl,圖片,二進位制資料等
能爬取什麼樣的資料
網頁文字:如HTML文件,Json格式化文字等
圖片:獲取到的是二進位制檔案,儲存為圖片格式
視訊:同樣是二進位制檔案
其他:只要請求到的,都可以獲取
如何解析資料
- 直接處理
- Json解析
- 正則表示式處理
- BeautifulSoup解析處理
- PyQuery解析處理
- XPath解析處理
關於抓取的頁面資料和瀏覽器裡看到的不一樣的問題
出現這種情況是因為,很多網站中的資料都是通過js,ajax動態載入的,所以直接通過get請求獲取的頁面和瀏覽器顯示的不同。
如何解決js渲染的問題?
分析ajax
Selenium/webdriver
Splash
PyV8,Ghost.py
怎樣儲存資料
文字:純文字,Json,Xml等
關係型資料庫:如mysql,oracle,sql server等結構化資料庫
非關係型資料庫:MongoDB,Redis等key-value形式儲存