婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > python 基于AioHttp 異步抓取火星圖片

python 基于AioHttp 異步抓取火星圖片

熱門標簽:女王谷地圖標注 如何在地圖標注文字 地圖標注推廣單頁 ai地圖標注 廈門crm外呼系統如何 百應ai電銷機器人鄭州 n400電話申請多少錢 西藏快速地圖標注地點 長春人工智能電銷機器人官網

翻譯:大江狗

原文鏈接:https://pfertyk.me/2017/06/getting-mars-photos-from-nasa-using-aiohttp/

小編注:aiohttp是基于asyncio實現的異步http框架。

本文案例也可以使用異步django實現。

我是Andy Weir寫的《火星人》一書的忠實粉絲。閱讀時,我想知道馬克·沃特尼(Mark Watney)繞著紅色星球走的感覺如何。最近,多虧了 Twilio的這篇博文, 我發現NASA提供了一個公共API,可以提供火星漫游者拍攝的照片。但是,由于不是MMS的忠實擁護者,我決定編寫自己的應用程序,以將具有啟發性的圖像直接傳遞到我的瀏覽器中。

創建aiohttp應用程序

讓我們從一個簡單的應用程序開始,只是為了啟動和運行aiohttp。首先,創建一個新的virtualenv。建議使用Python 3.5以后版本,因為我們將使用asyncio提供的async def和await語法。如果您想進一步開發該項目并利用異步理解的優勢,則可以使用Python 3.6(本例使用python版本)。接下來,安裝aiohttp:

pip install aiohttp

現在創建一個python文件(稱為nasa.py),并將一些代碼放入其中:

from aiohttp import web

async def get_mars_photo(request):
 return web.Response(text='A photo of Mars')

app = web.Application()
app.router.add_get('/', get_mars_photo, name='mars_photo')

如果您不熟悉aiohttp,則可能需要說明以下幾點:

  • get_mars_photo協程是一個請求處理程序;它以HTTP請求作為唯一參數,并負責返回HTTP響應(或引發異常)
  • app是高級服務器;它支持路由器,中間件和信號(對于該程序,我們將僅使用路由器)
  • app.router.add_get 在HTTP GET方法和'/'路徑上注冊請求處理程序

注意:請求處理程序不必一定是協程,它們可以是常規函數。但是我們將使用asyncio的功能,因此程序中的大多數函數都將使用進行定義async def。

運行應用程序

要運行您的應用程序,您可以在文件末尾添加以下行:

web.run_app(app, host='127.0.0.1', port=8080)

然后像運行其他任何Python腳本一樣運行它:

python nasa.py

但是有更好的方法。在許多第三方庫中,您可以找到aiohttp-devtools。它提供了一個很好的runserver命令,可以自動檢測您的應用并支持實時重載:

pip install aiohttp-devtools
adev runserver -p 8080 nasa.py

現在如果您訪問localhost:8080,則應該在瀏覽器中看到"A photo of mars"的字樣。

使用NASA API

當然,這還沒有結束。如果您是一位敏銳的觀察者,您會注意到我們沒有得到實際的圖像,而是一些文本。現在讓我們解決這個問題。

要從火星獲取照片,我們將使用NASA API。每個火星探路者(rover)都有自己的URL(對于好奇號,它url是https://api.nasa.gov/mars-photos/api/v1/rovers/curiosity/photos)。我們必須為每個請求至少提供2個參數:

  • sol:火星輪轉或拍攝照片的日期,從探路者的著陸日期開始算起(最大值可以rover/max_sol在響應的一部分中找到 )
  • API_KEY:由美國航天局提供的API密鑰(你可以使用默認的:DEMO_KEY)

響應數據里我們將獲得一張照片列表,每張照片均帶有URL,相機信息和探路者信息。

修改nasa.py文件,如下所示:

import random

from aiohttp import web, ClientSession
from aiohttp.web import HTTPFound

NASA_API_KEY = 'DEMO_KEY'
ROVER_URL = 'https://api.nasa.gov/mars-photos/api/v1/rovers/curiosity/photos'


async def get_mars_image_url_from_nasa():
 while True:
  sol = random.randint(0, 1722)
  params = {'sol': sol, 'api_key': NASA_API_KEY}
  async with ClientSession() as session:
   async with session.get(ROVER_URL, params=params) as resp:
    resp_dict = await resp.json()
  if 'photos' not in resp_dict:
   raise Exception
  photos = resp_dict['photos']
  if not photos:
   continue
  return random.choice(photos)['img_src']


async def get_mars_photo(request):
 url = await get_mars_image_url_from_nasa()
 return HTTPFound(url)

到底發生了什么事?

  • 我們選擇一個隨機拍攝日期(對于“好奇心” max_sol,在撰寫本文時,其值為1722)
  • ClientSession 創建一個會話,我們可以使用該會話從NASA API獲取響應
  • 我們使用獲取JSON響應 resp.json()
  • 我們檢查響應中是否存在“照片”鍵;如果沒有,我們已經達到了每小時請求數量的上限,我們需要稍等片刻
  • 如果當天沒有照片,我們會再次檢查是否有其他拍攝時間
  • 然后,我們使用HTTPFound響應重定向到找到的照片

獲取NASA API密鑰

DEMO_KEYNASA提供的默認設置可以正常工作,但是您很快就會達到每小時API調用的限制。我建議您獲取自己的API密鑰。您可以在此處進行操作 (注冊過程非常簡單快捷)。

現在,當您運行該應用程序時,您將直接從火星重定向到一個漂亮的圖像:

好吧,這不完全是我的意思...

驗證圖像

您剛剛看到的圖像并不讓人受到啟發。事實證明,漫游者拍攝了很多非常無聊的照片。我想看看馬克·沃特尼(Mark Watney)在他不可思議的旅程中所看到的,但這還不夠好。讓我們找到一種解決方法。

我們將需要對圖像進行某種形式的驗證。在指定篩選條件前,我們可以修改代碼:

async def get_mars_photo_bytes():
 while True:
  image_url = await get_mars_image_url_from_nasa()
  async with ClientSession() as session:
   async with session.get(image_url) as resp:
    image_bytes = await resp.read()
  if await validate_image(image_bytes):
   break
 return image_bytes


async def get_mars_photo(request):
 image = await get_mars_photo_bytes()
 return web.Response(body=image, content_type='image/jpeg')

這里發生了一些新的事情:

  • 我們使用先前定義的函數獲取URL,然后使用讀取圖像中的原始字節 resp.read()
  • 我們檢查我們的圖片是否足夠好;如果沒有,我們一直在尋找
  • 一旦有了令人滿意的照片,我們會將其放入響應中(注意,我們仍然使用與web.Response以前相同的照片,但是這次我們指定body 而不是text,同時了定義content_type

注意:在此代碼中,我們刪除了重定向(HTTPFound),因此現在我們可以輕松地刷新頁面以獲取另一個圖像。

現在我們需要弄清楚如何驗證照片。我們可以很容易做到的一件事就是檢查圖像尺寸否足夠大。這不是一個完美的驗證,但現在應該這樣做。要處理圖像,我們將需要python的圖片庫Pillow。

pip install pillow

我們的驗證函數可能如下所示:

import io
from PIL import Image

async def validate_image(image_bytes):
 image = Image.open(io.BytesIO(image_bytes))
 return image.width >= 1024 and image.height >= 1024

現在刷新瀏覽器,應該可以看到火星大圖了。

現在我們可以更進一步,拒絕灰度圖像:

async def validate_image(image_bytes):
 image = Image.open(io.BytesIO(image_bytes))
 return image.width >= 1024 and image.height >= 1024 and image.mode != 'L'

現在我們的程序開始返回更多鼓舞人心的照片:

偶爾還能看到機器人自拍:

總結

我們整個程序如下所示:

import random
import io

from aiohttp import web, ClientSession

from PIL import Image

NASA_API_KEY = 'DEMO_KEY'
ROVER_URL = 'https://api.nasa.gov/mars-photos/api/v1/rovers/curiosity/photos'


async def validate_image(image_bytes):
 image = Image.open(io.BytesIO(image_bytes))
 return image.width >= 1024 and image.height >= 1024 and image.mode != 'L'


async def get_mars_image_url_from_nasa():
 while True:
  sol = random.randint(0, 1722)
  params = {'sol': sol, 'api_key': NASA_API_KEY}
  async with ClientSession() as session:
   async with session.get(ROVER_URL, params=params) as resp:
    resp_dict = await resp.json()
  if 'photos' not in resp_dict:
   raise Exception
  photos = resp_dict['photos']
  if not photos:
   continue
  return random.choice(photos)['img_src']


async def get_mars_photo_bytes():
 while True:
  image_url = await get_mars_image_url_from_nasa()
  async with ClientSession() as session:
   async with session.get(image_url) as resp:
    image_bytes = await resp.read()
  if await validate_image(image_bytes):
   break
 return image_bytes


async def get_mars_photo(request):
 image = await get_mars_photo_bytes()
 return web.Response(body=image, content_type='image/jpeg')


app = web.Application()
app.router.add_get('/', get_mars_photo, name='mars_photo')

我們還可以改善很多事情(例如max_sol從API中獲取價值,傳遞流動站的名稱,緩存URL),但是現在它已經完成了工作:我們可以得到一張隨機的,鼓舞人心的火星照片,并覺得我們確實在那里。

我希望您喜歡這個簡短的教程。如果您發現錯誤或有任何疑問,請告訴我。

以上就是python 基于AioHttp 異步抓取火星圖片的詳細內容,更多關于python AioHttp 抓取火星圖片的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • Python中使用aiohttp模擬服務器出現錯誤問題及解決方法
  • Python requests及aiohttp速度對比代碼實例
  • Python aiohttp百萬并發極限測試實例分析
  • python aiohttp的使用詳解
  • Python中利用aiohttp制作異步爬蟲及簡單應用
  • Python中asyncio與aiohttp入門教程
  • Python爬蟲抓取指定網頁圖片代碼實例
  • python requests抓取one推送文字和圖片代碼實例
  • Python3簡單爬蟲抓取網頁圖片代碼實例
  • Python使用爬蟲抓取美女圖片并保存到本地的方法【測試可用】
  • Python爬蟲實現抓取京東店鋪信息及下載圖片功能示例
  • Python爬蟲之網頁圖片抓取的方法
  • python抓取網站的圖片并下載到本地的方法

標簽:興安盟 黔東 亳州 拉薩 廊坊 渭南 內江 綿陽

巨人網絡通訊聲明:本文標題《python 基于AioHttp 異步抓取火星圖片》,本文關鍵詞  python,基于,AioHttp,異步,抓取,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《python 基于AioHttp 異步抓取火星圖片》相關的同類信息!
  • 本頁收集關于python 基于AioHttp 異步抓取火星圖片的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美草草影院在线视频| 久久久精品国产免大香伊| 欧美一区二区三区在线看| 久久精品欧美日韩| 日韩在线播放一区二区| 99久久免费精品高清特色大片| 欧美高清激情brazzers| 亚洲图片你懂的| 看片的网站亚洲| 欧美性生交片4| 成人欧美一区二区三区视频网页 | 欧美亚洲禁片免费| 国产欧美一区二区精品秋霞影院| 天堂va蜜桃一区二区三区漫画版| 99久久伊人网影院| 久久久久久久久99精品| 麻豆一区二区三| 欧美酷刑日本凌虐凌虐| 亚洲免费av网站| 成人黄色777网| 久久久久9999亚洲精品| 老司机精品视频在线| 亚洲欧美日韩国产一区二区三区| 精品一区二区三区久久久| 欧美疯狂性受xxxxx喷水图片| 亚洲精品国产一区二区精华液 | 国产人成亚洲第一网站在线播放| 午夜精品久久久久久久久久| 在线观看日韩电影| 亚洲免费观看高清完整版在线观看熊 | 国产午夜亚洲精品午夜鲁丝片| 婷婷成人综合网| 欧美精品日韩综合在线| 亚洲第一av色| 欧美一区二区三区成人| 日本不卡视频一二三区| 日韩欧美亚洲一区二区| 免费成人小视频| 日韩精品中文字幕在线一区| 狠狠久久亚洲欧美| 国产欧美一区二区精品婷婷| 丁香五精品蜜臀久久久久99网站| 国产精品美女久久久久aⅴ | 欧美日韩国产乱码电影| 亚洲成人午夜电影| 日韩免费电影一区| 国产成人免费视频网站高清观看视频| 国产色91在线| 色香蕉久久蜜桃| 亚洲va韩国va欧美va精品| 911精品国产一区二区在线| 免费在线观看日韩欧美| 久久久久久久免费视频了| 成人18视频在线播放| 亚洲欧美日韩国产综合| 7777精品伊人久久久大香线蕉超级流畅 | 中文字幕一区二区三区在线不卡| 95精品视频在线| 亚洲一区二区三区中文字幕在线| 欧美剧在线免费观看网站 | 成人黄色网址在线观看| 亚洲黄色小说网站| 日韩亚洲欧美成人一区| 成人性视频免费网站| 一区二区三区小说| 精品国产99国产精品| 色中色一区二区| 久久国产尿小便嘘嘘| 一区在线播放视频| 日韩一区二区三区视频在线观看| 国产高清不卡二三区| 一区二区三区精品视频| xnxx国产精品| 欧美综合色免费| 国产一区二区三区av电影| 亚洲国产精品久久人人爱| 久久久久久久久久美女| 欧美日韩亚洲另类| 不卡av在线网| 黑人精品欧美一区二区蜜桃| 亚洲一区二区欧美日韩| 国产亚洲va综合人人澡精品| 久久精品水蜜桃av综合天堂| 91福利国产成人精品照片| 国产麻豆视频一区二区| 日韩黄色免费电影| 亚洲精品久久久久久国产精华液| 亚洲精品一线二线三线| 欧美日本韩国一区| 色一区在线观看| k8久久久一区二区三区| 久久99久久精品欧美| 亚洲成人免费在线| 亚洲一二三区在线观看| 国产精品二区一区二区aⅴ污介绍| 欧美成人乱码一区二区三区| 欧美三级日韩三级国产三级| 91小视频在线免费看| 成人污视频在线观看| 国产剧情一区在线| 国内成+人亚洲+欧美+综合在线 | 在线不卡免费av| 在线免费观看一区| 色婷婷久久久久swag精品 | 亚洲日本在线a| 国产精品网友自拍| 欧美激情在线看| 日本一区免费视频| 久久夜色精品一区| 久久久不卡影院| 国产午夜精品一区二区三区四区| 精品国产一区二区三区不卡 | 欧美在线free| 在线观看三级视频欧美| 欧美在线免费播放| 欧美精品一级二级| 日韩色视频在线观看| 日韩欧美激情四射| 2019国产精品| 国产日产欧美一区二区视频| 国产亚洲制服色| 欧美国产1区2区| 亚洲天堂精品在线观看| 亚洲精品第1页| 亚洲一区在线视频观看| 三级亚洲高清视频| 麻豆91精品视频| 国产精品1区2区3区| av电影在线不卡| 在线观看www91| 欧美疯狂做受xxxx富婆| 久久一二三国产| 亚洲天堂2016| 日本亚洲欧美天堂免费| 狠狠色丁香婷综合久久| 成人精品亚洲人成在线| 欧美亚洲尤物久久| 日韩精品一区二区三区视频| 国产欧美一区二区精品秋霞影院| 亚洲欧美另类综合偷拍| 天堂久久一区二区三区| 国产综合色视频| 91亚洲精品久久久蜜桃网站| 欧美精品1区2区| 久久久99精品免费观看| 亚洲激情图片qvod| 久久成人免费电影| 色狠狠桃花综合| 久久久青草青青国产亚洲免观| 亚洲三级电影网站| 久久91精品久久久久久秒播| 91网站在线播放| 欧美xxxx在线观看| 亚洲精品高清在线| 国产精品一区二区你懂的| 欧美少妇bbb| 国产亚洲精品资源在线26u| 亚洲午夜私人影院| 国产成人午夜高潮毛片| 欧美视频日韩视频在线观看| 国产婷婷色一区二区三区| 亚洲成人免费观看| 99国产精品视频免费观看| 日韩免费电影网站| 亚洲电影一区二区| av网站一区二区三区| 精品美女在线播放| 日韩av一区二| 91黄色激情网站| 国产精品入口麻豆原神| 六月丁香综合在线视频| 欧美色视频在线| 亚洲日本欧美天堂| 岛国av在线一区| 精品对白一区国产伦| 亚洲丶国产丶欧美一区二区三区| 不卡av在线网| 国产女同互慰高潮91漫画| 老司机免费视频一区二区| 69成人精品免费视频| 一级日本不卡的影视| 99精品视频在线播放观看| 欧美—级在线免费片| 国产精品1024久久| 26uuu色噜噜精品一区| 美国一区二区三区在线播放| 欧美色倩网站大全免费| 一区二区三区在线观看国产 | 国产成人午夜视频| 欧美大白屁股肥臀xxxxxx| 性欧美大战久久久久久久久| 在线视频欧美区| 亚洲午夜国产一区99re久久| 一本久久a久久精品亚洲| 日韩伦理免费电影| 91小视频在线观看| 亚洲欧美电影一区二区| 色久综合一二码| 亚洲国产wwwccc36天堂| 欧美日韩大陆一区二区|