python 爬蟲 02-urllib+request
1. urllib.request模組
1.1 版本
python2 :urllib2、urllib
python3 :把urllib和urllib2合併,urllib.request
1.2 常用的方法
- urllib.request.urlopen("URL") 作用 :向網站發起一個請求並獲取響應
- 位元組流 = response.read()
- 字串 = response.read().decode("utf-8")
- urllib.request.Request"URL",headers="User-Agent , Referer 之類") # 其得到的物件是
urlopen()不支援重構User-Agent 其中的request才可以用,一般套路都是 框架或模組 urllib.reauest.Request
unverifiable=False, method=None)
-
- 第一個引數url用於請求URL,肯定是必傳引數,其他都是可選
- 第二個引數data如果要傳,必須是bytes(位元組流)類,如果它是字典可以先用
urllib.parse模組裡的urlencode()編碼
-
- 第三個引數headers是一個字典,它就是請求頭,我們可在構造請求是通過headers引數直接構造,
也可通過呼叫請求例項的add_header()方法
新增請求頭★最常用的用法是通過修改User-Agent來偽裝瀏覽器,,預設的User-Agent是
python-urllib,我們可以通過修改它來偽裝瀏覽器。
如要偽裝火狐瀏覽器:
Mozilla/5.0(X11;U; Linux i686) Gecko/20071127 Firefox/2.0.0.11
-
- 第四個引數origin_req_host指的是請求方的host名稱或IP地址
- 第五個引數unverifiable表示這個請求是否無法驗證,預設False,意思是說使用者沒有足夠許可權
來接受這個請求的結果。
如我們請求一個HTML文件中的圖片,但是我們沒自動抓取影象的許可權,這是unverifiable的值
就是True
-
- 第六個引數method是一個字串,用來致死請求使用的方法,如GET,POST,PUT
1 import urllib.request 2 3 request = urllib.request.Request('https://python.org') 4 response = urllib.request.urlopen(request) #urlopen傳送這個請求 5 #但是引數不再是URL 6 #而是一個Request的物件 7 print(response.read().decode('utf-8'))
1.3 響應物件
- read() 讀取伺服器響應的內容
- getcode()返回HTTP的響應碼 # 就是相應狀態碼 200,301,302,304,404
- geturl() 返回實際資料的URL(防止重定向問題) # 這裡就是 先urlopen()之後的網站 呼叫其 geturl()看 其重定向
2. urllib.parse模組
2.1 常用方法
- urlencode(字典) #將一些ASCII 不可以列印的字元給轉化了,就是相當於搜尋欄裡面搜中文,&也會被轉,空格也會,非法字元也會
- quote(字串) (這個裡面的引數是個字串)
from urllib import request,parse url = 'http://httpbin.org/post' headers = { 'User-Agent':'自己的User-Agent', 'Host':'httpbin.org' } dict = { 'name':'Sun' } data = bytes(parse.urlencode(dict),encoding = 'utf8') req = request.Request(url = url,data = data,headers = headers,method = 'POST') reponse = request.urlopen(zeq) print(reponse.read().decaode('utf-8')) # 其中url請求URL # headers指定User-Agent和Host # 引數data用urlencode()和bytes()方法轉成位元組流 # 請求方法是POST # 另外,headers也可以用add_header()方法新增! # req = request.Request(url=url, data=data, method='POST') # req.add.header('User-agent','新增的User-Agent')
一些其他用法:
1 #urllib.request模組裡的BaseHandler類是所有其他Handler的父類 2 #其提供了default_open()、protocol_request() 3 4 5 #HTTPDefaultErrorHandler:用於處理HTTP響應錯誤,錯誤都會丟擲HTTPError型別的異常 6 #HTTPRedirectHandler:用於處理重定向 7 #HTTPCookieProcessor:用於處理Cookies 8 #ProxyHandler:用於設定代理,預設空 9 #HTTPPasswordMgr:用於管理密碼,它維護了使用者名稱和密碼的表 10 #HTTPBasicAuthHandler:用於管理認證,如連線開啟需認證,則可解決
3. 請求方式
- GET 特點 :查詢引數在URL地址中顯示
- POST
- 在Request方法中新增data引數 urllib.request.Request(url,data=data,headers=headers)
- data :表單資料以bytes型別提交,不能是str
4. requests模組
4.1 安裝
- pip install requests
- 在開發工具中安裝
4.2 request常用方法
- requests.get(網址)
4.3 響應物件response的方法
- response.text 返回unicode格式的資料(str)
- response.content 返回位元組流資料(二進位制)
- response.content.decode('utf-8') 手動進行解碼
- response.url 返回url
- response.encode() = ‘編碼’
4.4 requests模組傳送 POST請求
4.5 requests設定代理
- 使用requests新增代理只需要在請求方法中(get/post)傳遞proxies引數就可以了
- 代理網站
想看代理集合? 來這裡!!!
重要的就是找到免費代理網站然後存下來做成代理池
4.6 cookie
cookie :通過在客戶端記錄的資訊確定使用者身份
HTTP是一種無連線協議,客戶端和伺服器互動僅僅限於 請求/響應過程,結束後斷開,下一次請求時,伺服器會認為是一個新的客戶端,為了維護他們之間的連線,讓伺服器知道這是前一個使用者發起的請求,必須在一個地方儲存客戶端資訊。
4.7 session
session :通過在服務端記錄的資訊確定使用者身份 這裡這個session就是一個指的是會話
解釋:相當於 我登入給了cookie,但是下次就沒了,所以用一個會話儲存它,讓一個程式能繼續訪問該站點
4.8 處理不信任的SSL證書
什麼是SSL證書?
- SSL證書是數字證書的一種,類似於駕駛證、護照和營業執照的電子副本。因為配置在伺服器上,也稱為SSL伺服器證書。SSL 證書就是遵守 SSL協議,由受信任的數字證書頒發機構CA,在驗證伺服器身份後頒發,具有伺服器身份驗證和資料傳輸加密功能