爬蟲請求頭
網頁獲取:
通過urlopen來進行獲取
requset.urlopen(url,data,timeout)
第一個引數url即為URL,第二個引數data是訪問URL時要傳送的資料,第三個timeout是設定超時時間,
第二三個引數是可以不傳送的,data默認為空None,timeout默認為 socket._GLOBAL_DEFAULT_TIMEOUT
第一個引數URL是必須要加入的,執行urlopen方法之后,回傳一個response物件,回傳資訊便保存在這里面
from urllib.request import urlopen
url = "https://www.baidu.com/"
respons = urlopen(url)#最簡單的爬取情況這樣爬取大部分網頁無法爬取成功
response物件:
response.read()
read()方法就是讀取檔案里的全部內容,回傳bytes型別
print(type(respons.read()))#結果為bytes型別所以需要進行轉碼
print(type(respons.read().decode()))#通過decode轉碼結果為str
response.getcode()
回傳 HTTP的回應碼,成功回傳200,4服務器頁面出錯,5服務器問題
response.geturl()
回傳 回傳實際資料的實際URL,防止重定向問題
response.info()
回傳 服務器回應的HTTP報頭
Request物件
Request物件,由于urlopen引數可以傳入一個request請求(可以理解成為再加一步封裝的功能)因為在構建請求時還需要加入好多內容,通過構建一個request,服務器回應請求得到應答,這樣顯得邏輯上清晰明確
from urllib.request import urlopen,Request
from fake_useragent import UserAgent#這個包可以隨機生成User-Agent
url = "https://www.baidu.com/"
headers = {"User-Agent":UserAgent().firefox}#生成火狐的
request = Request(url,headers=headers)
response = urlopen(request)
a=response.read().decode()
Get請求
瀏覽器通過GET方法發出請求
爬蟲主要通過get再url中加入請求的引數,由于中文的需要轉碼通過
Urllib.parse.urlencode() 針對多個引數進行轉碼操作輸入格式為字典型別
Urllib.parse.quote() 針對單個字串進行轉碼操作
Str格式.format( ) 用于拼接字串
post請求
一般在需要登錄的地方用的比較多
需要在request請求中加如一個data用來傳入引數
引數的形式要以字典格式通過urllib.parse.urlencode()進行轉換成字串形式
再通過encode()函式對字串進行轉碼(默認值就可以)
發送請求/回應header頭的含義
| 名稱 | 含義 |
|---|---|
| Accept | 告訴服務器,客戶端支持的資料型別 |
| Accept-Charset | 告訴服務器,客戶端采用的編碼 |
| Accept-Encoding | 告訴服務器,客戶機支持的資料壓縮格式 |
| Accept-Language | 告訴服務器,客戶機的語言環境 |
| Host | 客戶機通過這個頭告訴服務器,想訪問的主機名 |
| If-Modified-Since | 客戶機通過這個頭告訴服務器,資源的快取時間 |
| Referer | 客戶機通過這個頭告訴服務器,它是從哪個資源來訪問服務器的,(一般用于防盜鏈) |
| User-Agent | 客戶機通過這個頭告訴服務器,客戶機的軟體環境 |
| Cookie | 客戶機通過這個頭告訴服務器,可以向服務器帶資料 |
| Refresh | 服務器通過這個頭,告訴瀏覽器隔多長時間重繪一次 |
| Content-Type | 服務器通過這個頭,回送資料的型別 |
| Content-Language | 服務器通過這個頭,告訴服務器的語言環境 |
| Server | 服務器通過這個頭,告訴瀏覽器服務器的型別 |
| Content-Encoding | 服務器通過這個頭,告訴瀏覽器資料采用的壓縮格式 |
| Content-Length | 服務器通過這個頭,告訴瀏覽器回送資料的長度 |
Ajax請求
用于提取動態的頁面 網頁資料根據拖動進行顯示
通過瀏覽器工具箱,查找包的資訊,找到url的規律進行爬取
如果無法知道要回圈多少次則規定一個死回圈,爬取頁面為空時停止回圈
也可以通過改變url一次性輸出更多的網頁資訊(只要服務器允許)
https請求
因為在有些瀏覽器中存在很多證書所以在大部分網頁爬取的時候不用改變證書或者添加證書但有些自己寫證書的網站需要進行這一步操作
https請求=在http上加ssl,http請求是明文直接可以看見,為了安全要加上ssl
可以選擇忽略證書進行爬取 context = ssl._create_unverified_context()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/163564.html
標籤:其他
