【Python爬虫】requests与urllib库的区别
我們在使用python爬蟲時,需要模擬發起網絡請求,主要用到的庫有requests庫和python內置的urllib庫,一般建議使用requests,它是對urllib的再次封裝,它們使用的主要區別:
requests可以直接構建常用的get和post請求并發起,urllib一般要先構建get或者post請求,然后再發起請求。
上面請求后得到的是requests.models.Response對象,需要處理后才能得到我們需要的信息
Response_get.text 得到的是str類型
Response_get.content 得到的是bytes類型,需要進行解碼Response_get.content.decode(),相當于Response_get.text
Response_get.json() 得到的是JSON數據類型
一般我們最簡單的get請求是requests.get(url),但是我們可以對請求進行定制,比如requests.get(url,headers=headers)
headers里面可以定制User-Agent和cookie
簡單的post請求是requests.post(url),我們也可以requests.post(url,data),其中data可以是列表,字典,JSON等類型
urllib.request 模塊提供了最基本的構造 HTTP 請求的方法,利用它可以模擬瀏覽器的一個請求發起過程。
# 同時它還帶有處理 authenticaton (授權驗證), redirections (重定向), cookies (瀏覽器Cookies)以及其它內容。
# context 參數,它必須是 ssl.SSLContext 類型,用來指定 SSL 設置。cafile 和 capath 兩個參數是指定CA證書和它的路徑,這個在請求 HTTPS 鏈接時會有用。
# cadefault 參數現在已經棄用了,默認為 False 。
# 它是一個 HTTPResposne 類型的對象,它主要包含的方法有 read() 、 readinto() 、getheader(name) 、 getheaders() 、 fileno() 等函數
# 和 msg 、 version 、 status 、 reason 、 debuglevel 、 closed 等屬性。 得到這個對象之后,賦值為 response ,
# 然后就可以用 response 調用這些方法和屬性,得到返回結果的一系列信息。
# 例如 response.read() 就可以得到返回的網頁內容, response.status 就可以得到返回結果的狀態碼,如200代表請求成功,404代表網頁未找到等。
簡單的get請求是urllib.request.urlopen(url),其中url可以是一個鏈接,也可以是一個請求,
所以我們定制請求頭需要通過urllib.request.Request(url,headers=headers)進行定制,然后當成url傳入到request.urlopen()
下面是兩個庫的簡單使用方法:
import requests import urllib.requesturl = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule' api ='http://open.iciba.com/dsapi/' headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'} form_data = {"i": "word","from": "AUTO","to": "AUTO","smartresult": "dict","doctype": "json","version": "2.1","keyfrom": "fanyi.web","action": "FY_BY_REALTIME","typoResult": "false" }req1 = requests.get(url,headers=headers) req_api = requests.get(api,headers=headers) print(type(req1),type(req1.text),req1.text) # requests.get().text是str類型 print("字符串",type(req1.content),req1.content) # requests.get().content是bytes類型 print("與直接req1.text一致",req1.content.decode()) print("接口返回json格式",req_api.json()) # 接口返回格式需要用requests.get().json()# POST發送的data必須為bytes或bytes類型的可迭代對象,不能是字符串 form_data = urllib.parse.urlencode(form_data).encode() # urllib.request.Request()只是一個請求: req2 = urllib.request.Request(url,data=form_data,headers=headers) print(type(req2))req3 = urllib.request.urlopen(url) # 不可以偽裝你的User Agent,可以通過urllib.request.Request()偽裝 print(type(req3),req3.status) # http.client.HTTPResponse print(req3.getheaders()) # 響應的信息集合 print(req3.read().decode("utf-8")) # urllib.request.urlopen().read().decode("utf-8")相當于requests.get().textreq4 = urllib.request.urlopen(req2) # 參數可以直接是一個請求 print("直接一個請求:",req4.read().decode("utf-8"))?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的【Python爬虫】requests与urllib库的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python中map()函数用法
- 下一篇: websocket python爬虫_p