請求頭常見參數 常見響應狀態碼 1.200:請求正常,伺服器正常的返回數據 2.301:永久重定問。比加在訪問w.jangdong.com的時候會重定向到w.Jd.cms 3.302:臨時重定向比如在訪問一個需要置錄的頁面的時候,而此時沒有登錄,那麼就會重定問到登錄頁面 4.400:請求的w1在服務 ...
- 請求頭常見參數
在htp協議中,向伺服器發送一個請求,數據分為三島分,第一個是把數據放在ur中,第二個是把數據放在body中(在post請 求中),第三個就是把數據放在head中。這裡介紹在網路爬蟲中經常會用到的一些請求頭參數:
1. User-Agent:瀏覽器名稱,這個在網路爬蟲中經常會被使用到。請求一個兩頁的時候,伺服器通過這個參數就可以知道這個請求 是由哪種覽器發送的。如果我們是通過爬蟲發送請求,那麼我們的User-4gent就是 Python,這對於那些有反爬蟲機制的網站來 說,可以輕易的判斷你這個請求是爬蟲,因此我們要經常設貿這個值力一些刻覽器的值,來偽裝我們的爬蟲
2. Referer:表明當的這個請求是從哪個ur1過來的,這個一般也可以用來做反爬蟲技術,如果不是從指定頁面過來的,那麼就不 做相關的響應
3. Cookie:htp協議是無狀態的。也就是同一個人發送了兩次請求,伺服器沒有能力知道這兩個請求是否來自同一個人·因此這 時候就用 cookie來做標識,一般如果想要做登錄後才能訪問的網站,那麼就需要發送coke信息了
- 常見響應狀態碼
1.200:請求正常,伺服器正常的返回數據
2.301:永久重定問。比加在訪問w.jangdong.com的時候會重定向到w.Jd.cms
3.302:臨時重定向比如在訪問一個需要置錄的頁面的時候,而此時沒有登錄,那麼就會重定問到登錄頁面
4.400:請求的w1在伺服器上找不到。換句話說就是請求ur1錯誤
5.403:伺服器托縮訪問,許可權不夠
6.500:伺服器內部錯誤。可能是伺服器出現bug了
- urllib庫 ur1lib庫是 Python中一個最基本的網路請求庫。可以模擬瀏覽器的行為,向指定的伺服器發送一個請求,並可以保存伺服器返回的 數據
- urlopen函數:
在Phon3的urllib庫中,所有和網路請求相關的方法,都樓集到urllib, request模塊下麵了,以先來看下 urlopen基本的 使用:
from urllib inport request resp.reqvest.urlopen("http://www.baidu.com") print(resp. reado)
實際上,使用瀏覽器訪問百度,右鍵查看源代碼,你會發現,跟我們剛纔列印出來的數據是一模一樣的。也就是說,上面的三行代碼 就已經幫我們把百度的百頁的全部代碼爬下來了。一個基本的url請求對應的 python代碼真的非常簡單 以下對 urlopen函數的進行詳細講解:
1.url:請求的url
2.data:請求的dta,如果設網了這個值,那麼將變成post請求
3.返回值:返回值是一個對象,這個對象是一個類文件句柄對象 有read(sze)、 readline、readine以及 getcode等方法
- urlretrieve函數
這個的數可以方便的將網頁上的一個文件保存到本地。以下代碼可以菲常方便的將百度的百頁下載到本地:
from urllsb import request request.urlretrieve('http://www.baiducom/,'baidu.html')
- urlencode函數:
用決覽器發送請求的時候,如果url中包含了中文或者其他特殊字元,那麼瀏覽器會自動的給我們進行編碼。而如果使用代碼發送請 求,那麼就必須手動的進行編碼,這時候就應該使用urlencode來實現, urlencode可把字典數據轉換為uRL編碼的數據 示例代碼如下:
from urllib inport parse data = {“name”:“爬蟲”', “greet”:"he1 lo word”, “age”:100} qs. = parse.urlencode (data) print(qs)
parse_qs函數 可以將經過編碼後的u參數進行解碼。
- ProxyHandler處理器(代理設置)
很多網站會檢測某一段時間某個iP的訪問次數(通過凌量統計,系統日誌等),如果訪問次數多的不像正常人,它會禁止這個iP的訪問 所以我們可以設置一些代理伺服器,每隔一段時間換一個代理,就算iP被禁止,依然可以換個iP續爬取 urllib中通過 ProxyHandler來設置使用代理伺服器,下麵代碼說明如何使用自定義opener來使用代理: 這個是沒有使用代理的
from urllib import request # 這個是沒有使用代理的 # resp = request.urlopen("http://baidu.com") # print(resq.read().decode("utf-8")) # 這個是使用代理的 handler = request.ProxyHander({"http":"218.66.82:32512"}) opener = request.build_opener(handler) req = request.Request("http://www.baidu.com") resp = opener.open(req) print(resp.read())