什麼是爬蟲:
爬蟲也就是網絡爬蟲(Web Spider)。翻譯過來就是在網絡上爬行的蜘蛛🕷️,這時候如果把互聯網看成是一張大網來的話,那麼爬蟲就是在大網上爬來爬去的蜘蛛,根據想要的東西,就將它提取出來
我們在瀏覽器中輸入一個網址,點擊了回車,就可以看到網頁上的信息。這個其實就是瀏覽器通過請求網站的服務器而得到的網絡資源,那麼爬蟲其實也就是模擬向瀏覽器發送請求,獲得到了當前網頁上的HMTL源碼。在這些源碼中通常包含了標籤和文字信息,這時候我們就可以從這裏面取到我們想要的信息了
通常爬蟲是從某個網站的某個頁面開始的,爬取這個頁面的內容,找到頁面中的其他的鏈接地址,然後從這個地址爬到下一個頁面,這樣一直不停的爬下去,就可以做到批量的信息的抓取,那麼我們就可以將網絡爬蟲看成是一個不同爬取網頁提取網頁信息的程序
爬蟲的基本流程:
1、發送請求-->requests
requests庫其實是有一個缺陷的,就是不能夠執行JS或者是CSS代碼
通過第三方類庫向目標站點發起請求,也就是發送一個Request,請求可以包含額外的headers信息,然後就是等待服務器的響應,其實就好像我們在瀏覽器中輸入一個網址,然後點擊回車。這個過程就是相當於瀏覽器作爲一個客戶端朝着服務端發送了一次請求。
2、獲取相應的內容
只要是服務器能夠正常相應的話,我們就會得到一個Response,這個Response裏面就會包含所要獲取的內容,這個內容可能是HTML、json字符串、二進制數據(圖片、視頻)等類型,這個過程就是服務器接受客戶端的請求,然後根據這個請求,將指定的HTML文件返回給當前的客戶端。
3、解析內容
得到的內容可能是HTML,這個時候可以使用正則表達式,第三方的網頁解析庫來進行解析,也有可能是Json對象,所以就可以直接進行解析。也可能是二進制的數據,所以要做保存或者進一步的處理。這一步其實就是相當於瀏覽器客戶端把服務端的文件獲取到本地,然後進行提取解析將有用的數據提取並且展示出來。
4、保存數據
保存的方式可以是把數據保存成文本,也可以把數據保存到數據庫中,或者保存成特定的格式,這個其實就是相當於我們在瀏覽網頁的時候下載了網頁上的圖片或者是視頻
Request和Response:
Request:
瀏覽器發送信息給網址所在的服務器,這個發送的過程就叫做Request
包含:
請求方式主要有GET和POST兩種。GET請求的請求參數會顯示在URL的鏈接後面,比如我們打開百度圖片,後面會跟着一個wd這個就表示我們要搜索的關鍵字,POST請求的請求參數會存放在Request內,並不會出現在URL鏈接的後面,比如我們登錄知乎,在我們輸入用戶名密碼的時候我們會看到瀏覽器開發者工具的Network頁面中Request請求有Form Data的鍵值對信息,那裏面就存放了我們的登錄信息,這樣做的目的就是爲了保護我們的信息的安全性;請求URL:URL的全稱是統一資源定位符,也就是我們平常說的網址,比如一張圖片、一個音頻文件、一個網頁文檔都可以用一個唯一的URL來表示,它包含的信息指出文件的位置以及瀏覽器應該怎麼去處理它;請求頭(Request Headers):請求頭包含請求時候的頭部信息,比如User-Agent(指定瀏覽器的請求頭),Host,Cookies等信息;請求體:請求體是請求額外攜帶的參數,比如在登錄的時候表單提交的登錄的信息
請求的URL:
網頁加載的過程:加載一個網頁,通常都是先加載document文檔,在解析document文檔的時候要是遇到了鏈接就針對這個超鏈接發起請求來下載裏面的內容
Response:
服務器收到瀏覽器發送的信息後,能夠根據瀏覽器發送信息的內容,做出相對應的處理,然後把消息回傳給瀏覽器,這個過程叫叫做HTTP Response
包含:
響應狀態:瀏覽器中有多種響應狀態,比如200表示請求成功,3xx表示重定向頁面,4xx網頁資源不存在,5xx表示服務器錯誤;響應頭(Response Headers):內容響應,內容長度,服務器信息,設置cookies等;響應體:包含了請求的資源(比如網頁的HTML代碼,圖片的二進制數據等)
請求頭:
User-Agent:請求頭中如果沒有user-agent客戶端配置,服務端可能將你當作一個非法的用戶
cookies:這個一般是用來保存登錄的信息的
ps:一般做爬蟲的都會加上請求頭來發送請求
需要注意的參數:
Referrer:訪問源從哪裏來(一些大型的網站,都會通過Referrer來設置防盜鏈策略;所有爬蟲也要加上這個來進行模擬)
User-Agent:訪問的瀏覽器(要加上否則會被當成爬蟲程序)
cookie:請求頭注意攜帶
請求體:
如果是GET方式,請求體是沒有內容的(GET請求的請求體放在URL後面的參數中,是可以直接看到的)
如果是POST請求,請求體是format data
ps:
登錄、註冊、文件上傳等信息都會被附加到請求內中
登錄,輸入密碼錯誤的用戶名密碼,然後提交,就可以看到post,正確登錄的時候是無法