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

主頁(yè) > 知識(shí)庫(kù) > python 基于AioHttp 異步抓取火星圖片

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

熱門標(biāo)簽:女王谷地圖標(biāo)注 如何在地圖標(biāo)注文字 地圖標(biāo)注推廣單頁(yè) ai地圖標(biāo)注 廈門crm外呼系統(tǒng)如何 百應(yīng)ai電銷機(jī)器人鄭州 n400電話申請(qǐng)多少錢 西藏快速地圖標(biāo)注地點(diǎn) 長(zhǎng)春人工智能電銷機(jī)器人官網(wǎng)

翻譯:大江狗

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

小編注:aiohttp是基于asyncio實(shí)現(xiàn)的異步http框架。

本文案例也可以使用異步django實(shí)現(xiàn)。

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

創(chuàng)建aiohttp應(yīng)用程序

讓我們從一個(gè)簡(jiǎn)單的應(yīng)用程序開(kāi)始,只是為了啟動(dòng)和運(yùn)行aiohttp。首先,創(chuàng)建一個(gè)新的virtualenv。建議使用Python 3.5以后版本,因?yàn)槲覀儗⑹褂胊syncio提供的async def和await語(yǔ)法。如果您想進(jìn)一步開(kāi)發(fā)該項(xiàng)目并利用異步理解的優(yōu)勢(shì),則可以使用Python 3.6(本例使用python版本)。接下來(lái),安裝aiohttp:

pip install aiohttp

現(xiàn)在創(chuàng)建一個(gè)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,則可能需要說(shuō)明以下幾點(diǎn):

  • get_mars_photo協(xié)程是一個(gè)請(qǐng)求處理程序;它以HTTP請(qǐng)求作為唯一參數(shù),并負(fù)責(zé)返回HTTP響應(yīng)(或引發(fā)異常)
  • app是高級(jí)服務(wù)器;它支持路由器,中間件和信號(hào)(對(duì)于該程序,我們將僅使用路由器)
  • app.router.add_get 在HTTP GET方法和'/'路徑上注冊(cè)請(qǐng)求處理程序

注意:請(qǐng)求處理程序不必一定是協(xié)程,它們可以是常規(guī)函數(shù)。但是我們將使用asyncio的功能,因此程序中的大多數(shù)函數(shù)都將使用進(jìn)行定義async def。

運(yùn)行應(yīng)用程序

要運(yùn)行您的應(yīng)用程序,您可以在文件末尾添加以下行:

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

然后像運(yùn)行其他任何Python腳本一樣運(yùn)行它:

python nasa.py

但是有更好的方法。在許多第三方庫(kù)中,您可以找到aiohttp-devtools。它提供了一個(gè)很好的runserver命令,可以自動(dòng)檢測(cè)您的應(yīng)用并支持實(shí)時(shí)重載:

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

現(xiàn)在如果您訪問(wèn)localhost:8080,則應(yīng)該在瀏覽器中看到"A photo of mars"的字樣。

使用NASA API

當(dāng)然,這還沒(méi)有結(jié)束。如果您是一位敏銳的觀察者,您會(huì)注意到我們沒(méi)有得到實(shí)際的圖像,而是一些文本?,F(xiàn)在讓我們解決這個(gè)問(wèn)題。

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

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

響應(yīng)數(shù)據(jù)里我們將獲得一張照片列表,每張照片均帶有URL,相機(jī)信息和探路者信息。

修改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)

到底發(fā)生了什么事?

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

獲取NASA API密鑰

DEMO_KEYNASA提供的默認(rèn)設(shè)置可以正常工作,但是您很快就會(huì)達(dá)到每小時(shí)API調(diào)用的限制。我建議您獲取自己的API密鑰。您可以在此處進(jìn)行操作 (注冊(cè)過(guò)程非常簡(jiǎn)單快捷)。

現(xiàn)在,當(dāng)您運(yùn)行該應(yīng)用程序時(shí),您將直接從火星重定向到一個(gè)漂亮的圖像:

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

驗(yàn)證圖像

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

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

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')

這里發(fā)生了一些新的事情:

  • 我們使用先前定義的函數(shù)獲取URL,然后使用讀取圖像中的原始字節(jié) resp.read()
  • 我們檢查我們的圖片是否足夠好;如果沒(méi)有,我們一直在尋找
  • 一旦有了令人滿意的照片,我們會(huì)將其放入響應(yīng)中(注意,我們?nèi)匀皇褂门cweb.Response以前相同的照片,但是這次我們指定body 而不是text,同時(shí)了定義content_type

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

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

pip install pillow

我們的驗(yàn)證函數(shù)可能如下所示:

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

現(xiàn)在刷新瀏覽器,應(yīng)該可以看到火星大圖了。

現(xiàn)在我們可以更進(jìn)一步,拒絕灰度圖像:

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'

現(xiàn)在我們的程序開(kāi)始返回更多鼓舞人心的照片:

偶爾還能看到機(jī)器人自拍:

總結(jié)

我們整個(gè)程序如下所示:

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中獲取價(jià)值,傳遞流動(dòng)站的名稱,緩存URL),但是現(xiàn)在它已經(jīng)完成了工作:我們可以得到一張隨機(jī)的,鼓舞人心的火星照片,并覺(jué)得我們確實(shí)在那里。

我希望您喜歡這個(gè)簡(jiǎn)短的教程。如果您發(fā)現(xiàn)錯(cuò)誤或有任何疑問(wèn),請(qǐng)告訴我。

以上就是python 基于AioHttp 異步抓取火星圖片的詳細(xì)內(nèi)容,更多關(guān)于python AioHttp 抓取火星圖片的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

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

標(biāo)簽:興安盟 黔東 亳州 拉薩 廊坊 渭南 內(nèi)江 綿陽(yáng)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《python 基于AioHttp 異步抓取火星圖片》,本文關(guān)鍵詞  python,基于,AioHttp,異步,抓取,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《python 基于AioHttp 異步抓取火星圖片》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于python 基于AioHttp 異步抓取火星圖片的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲最色的网站| 在线综合亚洲欧美在线视频| 久久99日本精品| 成人黄色综合网站| 在线视频一区二区免费| 在线观看一区日韩| 精品国产一区二区三区四区四| 中国色在线观看另类| 亚洲色图视频网| 欧美日韩精品三区| 日韩成人一级片| 亚洲欧洲综合另类在线| 久久精品国产精品亚洲红杏| 精品系列免费在线观看| 欧美日韩成人综合| 洋洋av久久久久久久一区| 国产毛片精品视频| 色综合天天综合给合国产| 日本一二三不卡| 成人晚上爱看视频| 日本韩国精品在线| 亚洲大片在线观看| 3d动漫精品啪啪一区二区竹菊| 亚洲综合精品自拍| 日韩精品在线网站| 国产精品亚洲一区二区三区妖精| 2021国产精品久久精品| 色综合久久久久网| 蜜臀av性久久久久蜜臀aⅴ四虎 | jlzzjlzz亚洲女人18| 亚洲国产人成综合网站| 欧美精品久久久久久久多人混战 | 欧美一区二区大片| 国产一区二区伦理片| 国产亚洲一区二区三区四区| 色综合色狠狠天天综合色| 亚洲一卡二卡三卡四卡五卡| 制服丝袜中文字幕亚洲| 国产suv精品一区二区6| 午夜欧美2019年伦理| 久久久久久免费| 欧美视频日韩视频在线观看| 国产激情一区二区三区| 麻豆成人综合网| 亚洲成在线观看| 亚洲精品免费在线观看| 自拍偷拍欧美激情| 日韩一区二区中文字幕| 欧美一级理论性理论a| 欧美日韩一区二区三区在线| av不卡在线观看| 91小视频在线免费看| 国产精品自产自拍| 成人精品一区二区三区四区 | 免费国产亚洲视频| 亚洲欧美区自拍先锋| 日韩欧美综合在线| 91精品国产综合久久精品图片| 亚洲国产综合色| 7777精品久久久大香线蕉| 在线日韩国产精品| 欧美三级日韩三级国产三级| av在线综合网| 欧美这里有精品| 亚洲3atv精品一区二区三区| 国产成人精品免费在线| 欧美三区在线视频| 久久久99精品免费观看不卡| 日本一区二区成人| 婷婷久久综合九色国产成人| 国产精品一区久久久久| 亚洲国产另类精品专区| 麻豆精品视频在线观看免费| 99久久99精品久久久久久| 欧美性大战久久| 国产一区啦啦啦在线观看| 制服丝袜亚洲色图| 久久久91精品国产一区二区三区| 日韩在线一区二区三区| 99久久精品费精品国产一区二区| 欧美男人的天堂一二区| 国产精品国产三级国产普通话蜜臀| 石原莉奈在线亚洲二区| 99精品热视频| 中文字幕中文在线不卡住| 亚洲福利视频一区| 亚洲激情在线播放| 欧美日韩视频在线一区二区| 亚洲色图在线看| 在线视频你懂得一区| 亚洲日本一区二区| 欧美视频一区在线观看| 亚洲gay无套男同| 1区2区3区欧美| 日韩精品中午字幕| 欧美日韩一区在线| 日韩极品在线观看| 97久久精品人人做人人爽50路| 久久九九国产精品| 国产99久久久久| 欧美精品免费视频| 亚洲综合久久av| 91老司机福利 在线| 综合分类小说区另类春色亚洲小说欧美| 久久精品国产一区二区| 欧美精品一区二区三区在线播放 | 亚洲精品在线观看网站| 欧美一区二区视频免费观看| 精品999在线播放| 亚洲欧美日韩国产一区二区三区| 国产伦精品一区二区三区视频青涩| 久久久国际精品| 亚洲欧美另类综合偷拍| 亚洲视频网在线直播| 欧美体内she精高潮| 精品一区二区三区免费播放| 精品女同一区二区| 97久久精品人人做人人爽50路| 亚洲一区二区三区爽爽爽爽爽| 日韩欧美亚洲另类制服综合在线| 国产一区二区视频在线| 偷拍自拍另类欧美| 亚洲不卡在线观看| 欧美三级视频在线观看| av影院午夜一区| 久久精品二区亚洲w码| 国产精品久久久久影院| 久久综合一区二区| 欧美在线观看禁18| 久久精品久久精品| 国产精品一区一区三区| 青青草国产成人99久久| 成人午夜av影视| 亚洲品质自拍视频| www.在线欧美| 欧美视频中文字幕| 精品国产一区二区三区不卡| 国产麻豆欧美日韩一区| 裸体健美xxxx欧美裸体表演| 麻豆一区二区三| 国产精品亚洲午夜一区二区三区 | 欧美日韩另类一区| 91官网在线观看| 91福利精品第一导航| 日本道色综合久久| 国产电影一区在线| 亚洲国产精品一区二区尤物区| 91在线视频免费观看| 精品国精品国产| 精品国产乱码久久久久久牛牛| 国产欧美一区二区三区鸳鸯浴| 日韩一区二区在线看| 国产午夜精品一区二区三区嫩草 | 国产亚洲va综合人人澡精品| 久久婷婷综合激情| 亚洲国产乱码最新视频| 风间由美一区二区av101| www.99精品| 青青草97国产精品免费观看无弹窗版| 精品在线免费视频| 91精品国产一区二区人妖| 一区二区三区在线观看国产| 国产成a人亚洲| 国产精品每日更新在线播放网址| www.久久精品| 成人性生交大片免费看中文网站| 麻豆精品在线播放| 免费成人美女在线观看| 欧美一级在线免费| 久久精品国产一区二区三| 日韩一级片网址| 奇米精品一区二区三区在线观看| 欧美日韩国产在线观看| 日韩福利视频导航| 久久精品网站免费观看| 99精品国产99久久久久久白柏| 久久久国产精品不卡| 国产99精品国产| 国产精品天干天干在观线| 成人av在线播放网址| 亚洲人成伊人成综合网小说| 在线观看视频欧美| 美国三级日本三级久久99| 国产偷v国产偷v亚洲高清| 91色婷婷久久久久合中文| 免费成人深夜小野草| 亚洲日本在线视频观看| www国产精品av| 欧美日韩精品是欧美日韩精品| 国产精品乡下勾搭老头1| 亚洲va在线va天堂| 国产女人18水真多18精品一级做| www.色综合.com| 丁香五精品蜜臀久久久久99网站| 亚洲国产成人tv| 亚洲精品视频免费观看| 日本一区二区动态图| 精品国产凹凸成av人导航| 欧美羞羞免费网站| 久草热8精品视频在线观看|