日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

【Python爬虫】requests与urllib库的区别

發布時間:2025/3/15 python 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Python爬虫】requests与urllib库的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們在使用python爬蟲時,需要模擬發起網絡請求,主要用到的庫有requests庫和python內置的urllib庫,一般建議使用requests,它是對urllib的再次封裝,它們使用的主要區別:
requests可以直接構建常用的get和post請求并發起,urllib一般要先構建get或者post請求,然后再發起請求。

import requestsResponse_get = requests.get(url, params=None, **kwargs) Response_post = requests.post(url, data=None, json=None, **kwargs)

上面請求后得到的是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等類型

import urllib.requestreq = urllib.request.Request(self, url, data=None, headers={},origin_req_host=None,unverifiable=False,method=None) Response_request = urllib.request.urlopen(req) Response = urllib.request.urlopen(url, data=None, timeout=1, cafile=None, capath=None, cadefault=False, context=None)

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库的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。