最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python中urllib.request和requests的使用及區(qū)別詳解

 更新時(shí)間:2020年05月05日 17:59:04   作者:野‘’狼  
這篇文章主要介紹了python中urllib.request和requests的使用及區(qū)別詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

urllib.request

我們都知道,urlopen()方法能發(fā)起最基本對(duì)的請(qǐng)求發(fā)起,但僅僅這些在我們的實(shí)際應(yīng)用中一般都是不夠的,可能我們需要加入headers之類(lèi)的參數(shù),那需要用功能更為強(qiáng)大的Request類(lèi)來(lái)構(gòu)建了

在不需要任何其他參數(shù)配置的時(shí)候,可直接通過(guò)urlopen()方法來(lái)發(fā)起一個(gè)簡(jiǎn)單的web請(qǐng)求

發(fā)起一個(gè)簡(jiǎn)單的請(qǐng)求

import urllib.request
url='https://www.douban.com'
webPage=urllib.request.urlopen(url)
print(webPage)
data=webPage.read()
print(data)
print(data.decode('utf-8'))

urlopen()方法返回的是一個(gè)http.client.HTTPResponse對(duì)象,需要通過(guò)read()方法做進(jìn)一步的處理。一般使用read()后,我們需要用decode()進(jìn)行解碼,通常為utf-8,經(jīng)過(guò)這些步驟后,最終才獲取到我們想要的網(wǎng)頁(yè)。

添加Headers信息

import urllib.request
url='https://www.douban.com'
headers = {
   'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36',
 }
response=urllib.request.Request(url=url,headers=headers)
webPage=urllib.request.urlopen(response)
print(webPage.read().decode('utf-8'))

使用Request類(lèi)返回的又是一個(gè)urllib.request.Request對(duì)象了。

通常我們爬取網(wǎng)頁(yè),在構(gòu)造http請(qǐng)求的時(shí)候,都需要加上一些額外信息,什么Useragent,cookie等之類(lèi)的信息,或者添加代理服務(wù)器。往往這些都是一些必要的反爬機(jī)制

requests

通常而言,在我們使用python爬蟲(chóng)時(shí),更建議用requests庫(kù),因?yàn)閞equests比urllib更為便捷,requests可以直接構(gòu)造get,post請(qǐng)求并發(fā)起,而urllib.request只能先構(gòu)造get,post請(qǐng)求,再發(fā)起。

import requests
url='https://www.douban.com'
headers = {
  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36',
}
get_response = requests.get(url,headers=headers,params=None)
post_response=requests.post(url,headers=headers,data=None,json=None)
print(post_response)
print(get_response.text)
print(get_response.content)
print(get_response.json)

get_response.text得到的是str數(shù)據(jù)類(lèi)型。

get_response.content得到的是Bytes類(lèi)型,需要進(jìn)行解碼。作用和get_response.text類(lèi)似。

get_response.json得到的是json數(shù)據(jù)。

總而言之,requests是對(duì)urllib的進(jìn)一步封裝,因此在使用上顯得更加的便捷,建議小伙伴們?cè)趯?shí)際應(yīng)用當(dāng)中盡量使用requests。

補(bǔ)充知識(shí):python中urllib.request.Request()與urllib.request.urlopen()區(qū)別

蟒蛇中urllib.request.Request()與urllib.request.urlopen()的區(qū)別:

相對(duì)于urllib.request.urlopen()來(lái)說(shuō)urllib.request.Request是進(jìn)一步的包裝請(qǐng)求,下面是請(qǐng)求類(lèi)的源碼示例:

class Request:
  
  # 主要看這塊,構(gòu)造函數(shù)中指明了Request進(jìn)一步包裝請(qǐng)求中可以傳遞的參數(shù)有(url,data,headers,            
  # origin_req_host,unverifiable,method)
 
  def __init__(self, url, data=None, headers={},
         origin_req_host=None, unverifiable=False,
         method=None):
    self.full_url = url
    self.headers = {}
    self.unredirected_hdrs = {}
    self._data = None
    self.data = data
    self._tunnel_host = None
    for key, value in headers.items():
      self.add_header(key, value)
    if origin_req_host is None:
      origin_req_host = request_host(self)
    self.origin_req_host = origin_req_host
    self.unverifiable = unverifiable
    if method:
      self.method = method
  pass

我們可以這樣使用(以下是模擬有道字典翻譯發(fā)送的請(qǐng)求):

# 請(qǐng)求地址url
url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"
 
# 請(qǐng)求頭
request_headers = {
  'Host':'fanyi.youdao.com',
  "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36",
}
 
# 發(fā)送給服務(wù)器的表單
form_data = {
  "i": word,
  "from": "AUTO",
  "to": "AUTO",
  "smartresult": "dict",
  "doctype": "json",
  "version": "2.1",
  "keyfrom": "fanyi.web",
  "action": "FY_BY_REALTIME",
  "typoResult": "false"
}
 
# POST發(fā)送的data必須為bytes或bytes類(lèi)型的可迭代對(duì)象,不能是字符串
form_data = urllib.parse.urlencode(form_data).encode()
 
# 構(gòu)造請(qǐng)求對(duì)象Request
req = urllib.request.Request(url, data=form_data, headers=request_headers)
 
# 發(fā)起請(qǐng)求
response = urllib.request.urlopen(req)
data = response.read().decode()
print(data)

所以,總的來(lái)說(shuō),如果我們?cè)讷@取請(qǐng)求對(duì)象時(shí),不需要過(guò)多的參數(shù)傳遞,我么可以直接選擇urllib.request.urlopen();如果需要進(jìn)一步的包裝請(qǐng)求,則需要用urllib.request里。的urlopen()進(jìn)行包裝處理。

以上這篇python中urllib.request和requests的使用及區(qū)別詳解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 基于Python構(gòu)建深度學(xué)習(xí)圖像分類(lèi)模型

    基于Python構(gòu)建深度學(xué)習(xí)圖像分類(lèi)模型

    在人工智能的浪潮中,圖像分類(lèi)作為計(jì)算機(jī)視覺(jué)領(lǐng)域的基礎(chǔ)任務(wù)之一,一直備受關(guān)注,本文將介紹如何使用Python和PyTorch框架,構(gòu)建一個(gè)簡(jiǎn)單的深度學(xué)習(xí)圖像分類(lèi)模型,感興趣的可以了解下
    2024-12-12
  • Django ORM filter() 的運(yùn)用詳解

    Django ORM filter() 的運(yùn)用詳解

    這篇文章主要介紹了Django ORM filter() 的運(yùn)用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05
  • python爬蟲(chóng)智能翻頁(yè)批量下載文件的實(shí)例詳解

    python爬蟲(chóng)智能翻頁(yè)批量下載文件的實(shí)例詳解

    在本篇文章里小編給大家整理的是一篇關(guān)于python爬蟲(chóng)智能翻頁(yè)批量下載文件的實(shí)例詳解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2021-02-02
  • Python3.5 win10環(huán)境下導(dǎo)入kera/tensorflow報(bào)錯(cuò)的解決方法

    Python3.5 win10環(huán)境下導(dǎo)入kera/tensorflow報(bào)錯(cuò)的解決方法

    這篇文章主要介紹了Python3.5 win10環(huán)境下導(dǎo)入keras/tensorflow報(bào)錯(cuò)的解決方法,較為詳細(xì)的分析了Python3.5在win10環(huán)境下導(dǎo)入keras/tensorflow提示錯(cuò)誤的原因與相關(guān)解決方法,需要的朋友可以參考下
    2019-12-12
  • python安裝讀取grib庫(kù)總結(jié)(推薦)

    python安裝讀取grib庫(kù)總結(jié)(推薦)

    這篇文章主要介紹了python安裝讀取grib庫(kù)總結(jié),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Python實(shí)現(xiàn)數(shù)據(jù)庫(kù)表的監(jiān)控警告的項(xiàng)目實(shí)踐

    Python實(shí)現(xiàn)數(shù)據(jù)庫(kù)表的監(jiān)控警告的項(xiàng)目實(shí)踐

    本文主要介紹了使用Python 實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)表的監(jiān)控告警功能, 并將告警信息通過(guò)釘釘機(jī)器人發(fā)送到釘釘群,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-05-05
  • Pytorch之nn.Upsample()和nn.ConvTranspose2d()用法詳解

    Pytorch之nn.Upsample()和nn.ConvTranspose2d()用法詳解

    nn.Upsample和nn.ConvTranspose2d是PyTorch中用于上采樣的兩種主要方法,nn.Upsample通過(guò)不同的插值方法(如nearest、bilinear)執(zhí)行上采樣,沒(méi)有可學(xué)習(xí)的參數(shù),適合快速簡(jiǎn)單的尺寸增加,而nn.ConvTranspose2d通過(guò)可學(xué)習(xí)的轉(zhuǎn)置卷積核進(jìn)行上采樣
    2024-10-10
  • 基于PyQt5制作一個(gè)猜數(shù)字小游戲

    基于PyQt5制作一個(gè)猜數(shù)字小游戲

    這篇文章主要為大家介紹了如何用Python中的PyQt5模塊制作一個(gè)帶GUI的猜數(shù)字小游戲,文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-03-03
  • Python中UserWarning:The NumPy module was reloaded問(wèn)題的解決方案

    Python中UserWarning:The NumPy module was 

    在 Python 項(xiàng)目中,我們經(jīng)常需要導(dǎo)入許多庫(kù)來(lái)完成各種任務(wù),NumPy 作為一個(gè)核心的科學(xué)計(jì)算庫(kù),被廣泛應(yīng)用于數(shù)據(jù)處理和分析,然而,有時(shí)我們會(huì)遇到 NumPy 重載的警告,本文將詳細(xì)講解這一警告的原因,并提供解決方案,需要的朋友可以參考下
    2024-07-07
  • Python迭代用法實(shí)例教程

    Python迭代用法實(shí)例教程

    這篇文章主要介紹了Python迭代用法,包括了迭代的定義及具體用法,是一個(gè)非常實(shí)用的技巧,需要的朋友可以參考下
    2014-09-09

最新評(píng)論

宁乡县| 古浪县| 许昌市| 周至县| 玛纳斯县| 三都| 青州市| 乐平市| 泰和县| 满城县| 淮安市| 西乌珠穆沁旗| 曲周县| 汶川县| 崇义县| 芜湖市| 视频| 大姚县| 汉川市| 朔州市| 绥宁县| 云和县| 洪雅县| 南昌县| 夹江县| 廊坊市| 彭阳县| 延寿县| 中超| 赫章县| 临夏市| 乐业县| 长丰县| 武宣县| 台江县| 伊通| 青岛市| 洪江市| 深泽县| 故城县| 涡阳县|