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

python爬蟲URL重試機(jī)制的實(shí)現(xiàn)方法(python2.7以及python3.5)

 更新時(shí)間:2018年12月18日 15:13:08   作者:ZJL-阿友  
今天小編就為大家分享一篇python爬蟲URL重試機(jī)制的實(shí)現(xiàn)方法(python2.7以及python3.5),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

應(yīng)用場(chǎng)景:

狀態(tài)不是200的URL重試多次

代碼比較簡(jiǎn)單還有部分注釋

python2.7實(shí)現(xiàn):

# -*-coding:utf-8-*-
"""
ayou
"""
 
import requests
 
def url_retry(url,num_retries=3):
 print("access!")
 try:
  request = requests.get(url,timeout=60)
  #raise_for_status(),如果不是200會(huì)拋出HTTPError錯(cuò)誤
  request.raise_for_status()
  html = request.content
 except requests.HTTPError as e:
  html=None
  if num_retries>0:
   #如果不是200就重試,每次遞減重試次數(shù)
   return url_retry(url,num_retries-1)
 #如果url不存在會(huì)拋出ConnectionError錯(cuò)誤,這個(gè)情況不做重試
 except requests.exceptions.ConnectionError as e:
  return
 return html
 
url_retry("http://httpbin.org/status/404")

python3.5實(shí)現(xiàn):

# -*-coding:utf-8-*-
"""
ayou
"""
import asyncio
import aiohttp
 
async def print_page(url,num_retries=3):
 async with aiohttp.ClientSession() as session:
  try:
   async with session.get(url,timeout=60) as response:
    print("access!")
     #raise_for_status(),如果不是200會(huì)拋出HttpProcessingError錯(cuò)誤
    response.raise_for_status()
    body = await response.text()
  except aiohttp.errors.HttpProcessingError as e:
   body = None
   if num_retries > 0:
     #如果不是200就重試,每次遞減重試次數(shù)
    return await print_page(url, num_retries - 1)
  #不存在URL會(huì)拋出ClientResponseError錯(cuò)誤
  except aiohttp.errors.ClientResponseError as e:
   return e
 session.close()
 print(body)
 return body
 
def main():
 #這是一個(gè)不存在URL
 # url = 'http://httpbin.org/status/404111'
 #這是一個(gè)404的URL
 url = 'http://httpbin.org/status/404'
 loop = asyncio.get_event_loop()
 loop.run_until_complete(print_page(url))
 loop.close()
 
if __name__ == '__main__':
 main()

爬蟲URL重試機(jī)制封裝成修飾器(python2.7以及python3.5以上)

python2.7版本:

# -*-coding:utf-8-*-
"""
ayou
"""
import requests
 
#定義一個(gè)重試修飾器,默認(rèn)重試一次
def retry(num_retries=1):
 #用來(lái)接收函數(shù)
 def wrapper(func):
  #用來(lái)接收函數(shù)的參數(shù)
  def wrapper(*args,**kwargs):
   #為了方便看拋出什么錯(cuò)誤定義一個(gè)錯(cuò)誤變量
   last_exception =None
   #循環(huán)執(zhí)行包裝的函數(shù)
   for _ in range(num_retries):
    try:
     #如果沒(méi)有錯(cuò)誤就返回包裝的函數(shù),這樣跳出循環(huán)
     return func(*args, **kwargs)
    except Exception as e:
     #捕捉到錯(cuò)誤不要return,不然就不會(huì)循環(huán)了
     last_exception = e
   #如果要看拋出錯(cuò)誤就可以拋出
   # raise last_exception
  return wrapper
 return wrapper
 
if __name__=="__main__":
 @retry(5)
 def url_retry(url):
  request = requests.get(url, timeout=60)
  print("access!")
  request.raise_for_status()
  html = request.content
  print(html)
  return html
 
 url_retry("http://httpbin.org/status/404")
 # url_retry("http://httpbin.org/status/404111")
 # url_retry("http://www.baidu.com")

python3.5以上版本:

# -*-coding:utf-8-*-
"""
ayou
"""
import aiohttp,asyncio
 
#定義一個(gè)重試修飾器,默認(rèn)重試一次
def retry(num_retries=1):
 #用來(lái)接收函數(shù)
 def wrapper(func):
  #用來(lái)接收函數(shù)的參數(shù)
  def wrapper(*args,**kwargs):
   #為了方便看拋出什么錯(cuò)誤定義一個(gè)錯(cuò)誤變量
   last_exception =None
   #循環(huán)執(zhí)行包裝的函數(shù)
   for _ in range(num_retries):
    try:
     #如果沒(méi)有錯(cuò)誤就返回包裝的函數(shù),這樣跳出循環(huán)
     return func(*args, **kwargs)
    except Exception as e:
     #捕捉到錯(cuò)誤不要return,不然就不會(huì)循環(huán)了
     last_exception = e
   #如果要看拋出錯(cuò)誤就可以拋出
   # raise last_exception
  return wrapper
 return wrapper
 
async def print_page(url):
 async with aiohttp.ClientSession() as session:
  async with session.get(url,timeout=60) as response:
   print("access!")
    #raise_for_status(),如果不是200會(huì)拋出HttpProcessingError錯(cuò)誤
   response.raise_for_status()
   body = await response.text()
 session.close()
 print(body)
 return body
 
@retry(5)
def loop_get():
 # url = "http://www.baidu.com"
 # url = 'http://httpbin.org/status/404111'
 url = 'http://httpbin.org/status/404'
 loop = asyncio.get_event_loop()
 loop.run_until_complete(print_page(url))
 loop.close()
 
if __name__ == '__main__':
 loop_get()

以上這篇python爬蟲URL重試機(jī)制的實(shí)現(xiàn)方法(python2.7以及python3.5)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python?查找算法之二分查找線性查找與哈希查找實(shí)例探究

    Python?查找算法之二分查找線性查找與哈希查找實(shí)例探究

    這篇文章主要為大家介紹了Python查找算法探究之二分查找、線性查找與哈希查找的實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Python使用PIL庫(kù)將PNG圖片轉(zhuǎn)換為ICO圖標(biāo)的示例代碼

    Python使用PIL庫(kù)將PNG圖片轉(zhuǎn)換為ICO圖標(biāo)的示例代碼

    在軟件開(kāi)發(fā)和網(wǎng)站設(shè)計(jì)中,ICO圖標(biāo)是一種常用的圖像格式,特別適用于應(yīng)用程序圖標(biāo)、網(wǎng)頁(yè)收藏夾圖標(biāo)等場(chǎng)景,本文將介紹如何使用Python的PIL庫(kù)將PNG圖片轉(zhuǎn)換為ICO格式的圖標(biāo)文件,需要的朋友可以參考下
    2025-03-03
  • Python?+?Selenium?實(shí)現(xiàn)模擬登錄jd實(shí)例分享

    Python?+?Selenium?實(shí)現(xiàn)模擬登錄jd實(shí)例分享

    這篇文章主要介紹了Python?+?Selenium?實(shí)現(xiàn)模擬登錄jd實(shí)例分享的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • python Timer 類使用介紹

    python Timer 類使用介紹

    這篇文章主要介紹了python Timer 類使用介紹的相關(guān)資料,幫助大家更好的理解和使用python iupdatable包,感興趣的朋友可以了解下
    2020-12-12
  • 對(duì)python中矩陣相加函數(shù)sum()的使用詳解

    對(duì)python中矩陣相加函數(shù)sum()的使用詳解

    今天小編就為大家分享一篇對(duì)python中矩陣相加函數(shù)sum()的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • Python實(shí)現(xiàn)搜索算法的實(shí)例代碼

    Python實(shí)現(xiàn)搜索算法的實(shí)例代碼

    這篇文章主要介紹了Python實(shí)現(xiàn)搜索算法,文中通過(guò)實(shí)例代碼給大家分享高級(jí)搜索算法的想法,分為線性搜索和插值搜索,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Python模塊常用四種安裝方式

    Python模塊常用四種安裝方式

    這篇文章主要介紹了Python模塊常用四種安裝方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Python在線和離線安裝第三方庫(kù)的方法

    Python在線和離線安裝第三方庫(kù)的方法

    這篇文章主要介紹了Python在線和離線安裝第三方庫(kù)的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • keras中模型訓(xùn)練class_weight,sample_weight區(qū)別說(shuō)明

    keras中模型訓(xùn)練class_weight,sample_weight區(qū)別說(shuō)明

    這篇文章主要介紹了keras中模型訓(xùn)練class_weight,sample_weight區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05
  • python中l(wèi)ist方法詳解

    python中l(wèi)ist方法詳解

    list 是 Python 中的一種內(nèi)置數(shù)據(jù)類型,代表一個(gè)可變的有序序列。list 類型的對(duì)象可以使用多個(gè)方法來(lái)操作和修改其中的元素。文中通過(guò)代碼示例詳細(xì)介紹了list的常用方法,感興趣的同學(xué)可以參考閱讀
    2023-04-04

最新評(píng)論

陇西县| 静海县| 封开县| 土默特左旗| 资讯 | 高州市| 金坛市| 大竹县| 东平县| 象州县| 龙口市| 本溪| 彰化县| 错那县| 德清县| 页游| 丰原市| 阳新县| 台安县| 汤阴县| 武胜县| 张掖市| 舒城县| 诸城市| 光山县| 视频| 太原市| 郸城县| 临武县| 广河县| 北宁市| 葵青区| 绥芬河市| 那曲县| 收藏| 南投县| 城固县| 陇川县| 玉门市| 新兴县| 班玛县|