什麼是爬蟲?
爬蟲即網絡爬蟲,英文是Web Spider
。翻譯過來就是網絡上爬行的蜘蛛,如果把互聯網看作一張大網,那麼爬蟲就是在大網上爬來爬去的蜘蛛,碰到想要的食物,就把他抓取出來。
我們在瀏覽器中輸入一個網址,敲擊回車,看到網站的頁面信息。這就是瀏覽器請求了網站的服務器,獲取到網絡資源。那麼,爬蟲也相當於模擬瀏覽器發送請求,獲得到HTML
代碼。HTML
代碼裏通常包含了標籤和文字信息,我們就從中提取到我們想要的信息。
通常爬蟲是從某個網站的某個頁面開始,爬取這個頁面的內容,找到網頁中的其他鏈接地址,然後從這個地址爬到下一個頁面,這樣一直不停的爬下去,進去批量的抓取信息。那麼,我們可以看出網絡爬蟲就是一個不停爬取網頁抓取信息的程序。
爬蟲的基本流程
1.發起請求:
通過HTTP庫向目標站點發起請求,即發送一個Request
,請求可以包含額外的headers
等信息,然後等待服務器響應。這個請求的過程就像我們打開瀏覽器,在瀏覽器地址欄輸入網址:www.baidu.com
,然後點擊回車。這個過程其實就相當於瀏覽器作爲一個瀏覽的客戶端,向服務器端發送了 一次請求。
2.獲取響應內容:
如果服務器能正常響應,我們會得到一個Response
,Response
的內容便是所要獲取的內容,類型可能有HTML
、Json
字符串,二進制數據(圖片,視頻等)等類型。這個過程就是服務器接收客戶端的請求,進過解析發送給瀏覽器的網頁HTML
文件。
3.解析內容:
得到的內容可能是HTML
,可以使用正則表達式,網頁解析庫進行解析。也可能是Json
,可以直接轉爲Json
對象解析。可能是二進制數據,可以做保存或者進一步處理。這一步相當於瀏覽器把服務器端的文件獲取到本地,再進行解釋並且展現出來。
4.保存數據:
保存的方式可以是把數據存爲文本,也可以把數據保存到數據庫,或者保存爲特定的jpg,mp4 等格式的文件。這就相當於我們在瀏覽網頁時,下載了網頁上的圖片或者視頻。
Request
1.什麼是Request?
瀏覽器發送信息給該網址所在的服務器,這個過程就叫做HTTP Request
。
2.Request中包含什麼?
- 請求方式:請求方式的主要類型是
GET
,OST
兩種,另外還有HEAD
、PUT
、DELETE
等。GET 請求的請求參數會顯示在URL鏈接的後面,比如我們打開百度,搜索“圖片”,我們會看到請求的URL鏈接爲https://www.baidu.com/s?wd=圖片
。而 POST 請求的請求參數會存放在Request
內,並不會出現在 URL 鏈接的後面,比如我們登錄知乎,輸入用戶名和密碼,我們會看到瀏覽器開發者工具的Network
頁,Request
請求有Form Data
的鍵值對信息,那裏就存放了我們的登錄信息,有利於保護我們的賬戶信息安全; - 請求 URL:URL 全稱是統一資源定位符,也就是我們說的網址。比如一張圖片,一個音樂文件,一個網頁文檔等都可以用唯一URL來確定,它包含的信息指出文件的位置以及瀏覽器應該怎麼去處理它;
- 請求頭
(Request Headers)
:請求頭包含請求時的頭部信息,如User-Agent
(指定瀏覽器的請求頭),Host
,Cookies
等信息; - 請求體:請求體是請求是額外攜帶的數據,比如登錄表單提交的登錄信息數據。
Response
1.什麼是Response?
服務器收到瀏覽器發送的信息後,能夠根據瀏覽器發送信息的內容,做出相應的處理,然後把消息回傳給瀏覽器,這個過程就叫做HTTP Response
。
2.Response中包含什麼?
- 響應狀態:有多種響應狀態,比如200代表成功,301 跳轉頁面,404 表示找不到頁面,502 表示服務器錯誤;
- 響應頭
(Response Headers)
:比如內容類型,內容長度,服務器信息,設置Cookie
等; - 響應體:響應體最主要的部分,包含了請求資源的內容,比如網頁 HTML 代碼,圖片二進制數據等。
簡單演示
|
運行成功後可以看到打印出來的 html 源代碼和 200 狀態碼了。這就基本上實現了爬蟲的Request
和Response
的過程。
能抓到什麼樣的數據?
- 網頁文本:如 HTML 文檔,
Ajax
加載的Json
格式文本等; - 圖片,視頻等:獲取到的是二進制文件,保存爲圖片或視頻格式;
- 其他只要能請求到的,都能獲取。
演示
|
成功運行就可以看到打印出來的圖片的二進制數據,可保存成功後打印的 OK,這個時候我們打開文件夾就可以看到下載下來的圖片了。這幾行代碼就簡單的演示了爬蟲保存文件的過程。
解析方式有哪些?
- 直接處理,比如簡單的頁面文檔,只要去除一些空格的數據;
- Json解析,處理Ajax加載的頁面;
- 正則表達式;
- BeautifulSoup庫;
- PyQuery;
- XPath。
看到這裏,大家是不是已經對爬蟲的基本工作原理有了清晰的認識了呢。當然,羅馬並不是一天建成的,只要積累了足夠多的經驗,大家肯定能成爲爬蟲大神的。
接下來,我會給大家繼續分享一些我在學習爬蟲時的經驗總結。