欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

應(yīng)用場景:

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

代碼比較簡單還有部分注釋

python2.7實現(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會拋出HTTPError錯誤
  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不存在會拋出ConnectionError錯誤,這個情況不做重試
 except requests.exceptions.ConnectionError as e:
  return
 return html
 
url_retry("http://httpbin.org/status/404")

python3.5實現(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會拋出HttpProcessingError錯誤
    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會拋出ClientResponseError錯誤
  except aiohttp.errors.ClientResponseError as e:
   return e
 session.close()
 print(body)
 return body
 
def main():
 #這是一個不存在URL
 # url = 'http://httpbin.org/status/404111'
 #這是一個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重試機制封裝成修飾器(python2.7以及python3.5以上)

python2.7版本:

# -*-coding:utf-8-*-
"""
ayou
"""
import requests
 
#定義一個重試修飾器,默認重試一次
def retry(num_retries=1):
 #用來接收函數(shù)
 def wrapper(func):
  #用來接收函數(shù)的參數(shù)
  def wrapper(*args,**kwargs):
   #為了方便看拋出什么錯誤定義一個錯誤變量
   last_exception =None
   #循環(huán)執(zhí)行包裝的函數(shù)
   for _ in range(num_retries):
    try:
     #如果沒有錯誤就返回包裝的函數(shù),這樣跳出循環(huán)
     return func(*args, **kwargs)
    except Exception as e:
     #捕捉到錯誤不要return,不然就不會循環(huán)了
     last_exception = e
   #如果要看拋出錯誤就可以拋出
   # 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
 
#定義一個重試修飾器,默認重試一次
def retry(num_retries=1):
 #用來接收函數(shù)
 def wrapper(func):
  #用來接收函數(shù)的參數(shù)
  def wrapper(*args,**kwargs):
   #為了方便看拋出什么錯誤定義一個錯誤變量
   last_exception =None
   #循環(huán)執(zhí)行包裝的函數(shù)
   for _ in range(num_retries):
    try:
     #如果沒有錯誤就返回包裝的函數(shù),這樣跳出循環(huán)
     return func(*args, **kwargs)
    except Exception as e:
     #捕捉到錯誤不要return,不然就不會循環(huán)了
     last_exception = e
   #如果要看拋出錯誤就可以拋出
   # 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會拋出HttpProcessingError錯誤
   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重試機制的實現(xiàn)方法(python2.7以及python3.5)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:

相關(guān)文章

  • python爬取足球直播吧五大聯(lián)賽積分榜

    python爬取足球直播吧五大聯(lián)賽積分榜

    這篇文章主要為大家詳細介紹了python爬取足球直播吧五大聯(lián)賽積分榜,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • 深入探索Django中間件的應(yīng)用場景

    深入探索Django中間件的應(yīng)用場景

    Django中間件是一種可插拔的應(yīng)用程序組件,可在請求和響應(yīng)處理過程中修改Django的行為。中間件可用于處理請求、響應(yīng)、異常等,還可用于實現(xiàn)身份驗證、緩存、性能監(jiān)控等常用功能。通過深入探索中間件的應(yīng)用場景,可以提高Django應(yīng)用程序的可擴展性和靈活性
    2023-05-05
  • python?離散點圖畫法的實現(xiàn)

    python?離散點圖畫法的實現(xiàn)

    本文主要介紹了python?離散點圖畫法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • Python實現(xiàn)GIF動圖加載和降幀的方法詳解

    Python實現(xiàn)GIF動圖加載和降幀的方法詳解

    這篇文章主要為大家詳細介紹了如何利用Python和Pygame實現(xiàn)GIF動圖加載和降幀的效果,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2023-02-02
  • Python建立多元回歸方程的實現(xiàn)

    Python建立多元回歸方程的實現(xiàn)

    在Python中,可以使用scikit-learn和statsmodels等庫來建立多元線性回歸模型,本文主要介紹了Python建立多元回歸方程的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • 零基礎(chǔ)學(xué)習(xí)python偏函數(shù)語法的推導(dǎo)方法步驟

    零基礎(chǔ)學(xué)習(xí)python偏函數(shù)語法的推導(dǎo)方法步驟

    這篇文章主要介紹了零基礎(chǔ)學(xué)習(xí)python偏函數(shù)語法的推導(dǎo)方法步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • Python學(xué)習(xí)筆記之While循環(huán)用法分析

    Python學(xué)習(xí)筆記之While循環(huán)用法分析

    這篇文章主要介紹了Python學(xué)習(xí)筆記之While循環(huán)用法,結(jié)合具體實例形式分析了while循環(huán)的原理、用法及相關(guān)操作注意事項,需要的朋友可以參考下
    2019-08-08
  • python實現(xiàn)列車管理系統(tǒng)

    python實現(xiàn)列車管理系統(tǒng)

    這篇文章主要為大家詳細介紹了python實現(xiàn)列車管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • python小白學(xué)習(xí)包管理器pip安裝

    python小白學(xué)習(xí)包管理器pip安裝

    在本篇文章里小編給大家分享的是一篇python包管理器pip安裝的相關(guān)知識點內(nèi)容,有興趣的朋友們參考下。
    2020-06-06
  • 一文教會你使用Python批量縮放圖片

    一文教會你使用Python批量縮放圖片

    最近處理一些規(guī)格不一的照片,需要修改成指定尺寸便于打印,下面這篇文章主要給大家介紹了關(guān)于使用Python批量縮放圖片的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-02-02

最新評論