在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用AioHttp異步抓取火星圖片

馬哥Linux運(yùn)維 ? 來(lái)源:Python編程學(xué)習(xí)圈 ? 作者:Python編程學(xué)習(xí)圈 ? 2022-03-16 09:58 ? 次閱讀

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

讓我們從一個(gè)簡(jiǎn)單的應(yīng)用程序開始,只是為了啟動(dòng)和運(yùn)行aiohttp。首先,創(chuàng)建一個(gè)新的virtualenv。建議使用Python 3.5以后版本,因?yàn)槲覀儗⑹褂胊syncio提供的async defawait語(yǔ)法。如果您想進(jìn)一步開發(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)在如果您訪問localhost:8080,則應(yīng)該在瀏覽器中看到"A photo of mars"的字樣。

使用NASA API

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

要從火星獲取照片,我們將使用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)或拍攝照片的日期,從探路者的著陸日期開始算起(最大值可以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)中是否存在“照片”鍵;如果沒有,我們已經(jīng)達(dá)到了每小時(shí)請(qǐng)求數(shù)量的上限,我們需要稍等片刻

  • 如果當(dāng)天沒有照片,我們會(huì)再次檢查是否有其他拍攝時(shí)間

  • 然后,我們使用HTTPFound響應(yīng)重定向到找到的照片

獲取NASA API密鑰

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

  • 我們檢查我們的圖片是否足夠好;如果沒有,我們一直在尋找

  • 一旦有了令人滿意的照片,我們會(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)在我們的程序開始返回更多鼓舞人心的照片:

爾還能看到機(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ī)的,鼓舞人心的火星照片,并覺得我們確實(shí)在那里。

原文標(biāo)題:Python | AioHttp 異步抓取火星圖片

文章出處:【微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

審核編輯:湯梓紅


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 文件
    +關(guān)注

    關(guān)注

    1

    文章

    569

    瀏覽量

    24776
  • 程序
    +關(guān)注

    關(guān)注

    117

    文章

    3793

    瀏覽量

    81220
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4801

    瀏覽量

    84862

原文標(biāo)題:Python | AioHttp 異步抓取火星圖片

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    ADI AD6645轉(zhuǎn)換器幫助捕捉令人驚嘆的高清晰火星圖片

    ADI公司的轉(zhuǎn)換器技術(shù)正在波爾航天的高分辨率成像科學(xué)實(shí)驗(yàn) (HiRISE) 相機(jī)內(nèi)工作,幫助科學(xué)家獲得有史以來(lái)最為精細(xì)的火星圖片
    發(fā)表于 08-23 10:47 ?1094次閱讀

    “鉆木取火”才能點(diǎn)亮的臺(tái)燈

    `現(xiàn)在電子產(chǎn)品千奇百怪,好的創(chuàng)意才會(huì)讓人眼前一亮,就比如這款“鉆木取火”的臺(tái)燈。就很有意思,所以想給大家介紹一下,希望各位以后在創(chuàng)新電子產(chǎn)品的時(shí)候也能夠有好的點(diǎn)子。關(guān)于人類最開始是怎么制造出了火
    發(fā)表于 02-15 15:39

    異步電動(dòng)機(jī)圖片

    `異步電動(dòng)機(jī)圖片`
    發(fā)表于 04-15 15:54

    labview如何做到到指定文件夾下抓取圖片

    labview如何做到到指定文件夾下抓取圖片
    發(fā)表于 08-20 20:37

    為好奇號(hào)火星探測(cè)器提供視野

    夏普山(Mount Sharp)和火星地理的其它特性。下一發(fā)現(xiàn)將是什么尚不清楚,但無(wú)論好奇號(hào)發(fā)現(xiàn)什么,我們將一路跟隨。若您有興趣了解更多關(guān)于好奇號(hào)探測(cè)器的信息,最好先訪問美國(guó)航天局為這任務(wù)建立的網(wǎng)站,它還包括由這探測(cè)器上的科學(xué)攝像機(jī)拍攝的完整的圖片集。
    發(fā)表于 11-01 08:59

    數(shù)據(jù)抓取問題

    新人想做一個(gè)裝置,用于抓取水質(zhì)監(jiān)測(cè)數(shù)據(jù),假設(shè)現(xiàn)在水質(zhì)監(jiān)測(cè)系統(tǒng)已經(jīng)建成,但是想通過數(shù)據(jù)抓取裝置獲取水質(zhì)數(shù)據(jù),類似圖片的形式,請(qǐng)問大佬們可以怎么實(shí)現(xiàn)
    發(fā)表于 11-02 11:18

    ADI轉(zhuǎn)換器幫助捕捉令人驚嘆的高清晰火星圖片

    在距離地球數(shù)百萬(wàn)英里的火星軌道上,Analog Devices, Inc.(ADI)公司的轉(zhuǎn)換器技術(shù)正在波爾航太的高解析度成像科學(xué)實(shí)驗(yàn) (HiRISE) 相機(jī)內(nèi)工作,幫助科學(xué)家獲得有史以來(lái)最為精細(xì)的火星
    發(fā)表于 08-24 09:23 ?968次閱讀

    C#教程之抓取整站圖片

    C#教程之抓取整站圖片,很好的C#資料,快來(lái)學(xué)習(xí)吧。
    發(fā)表于 04-20 11:13 ?5次下載

    C#教程之抓取左上角圖片

    C#教程之抓取左上角圖片,很好的C#資料,快來(lái)學(xué)習(xí)吧。
    發(fā)表于 04-20 11:13 ?3次下載

    基于嵌入式的衛(wèi)星圖像處理系統(tǒng)的研究

    隨著科技的不斷進(jìn)步,我國(guó)發(fā)射的功能專一的商業(yè)衛(wèi)星數(shù)量越來(lái)越多,衛(wèi)星圖像數(shù)據(jù)內(nèi)容也越來(lái)越豐富。以往的圖像處理系統(tǒng)日漸達(dá)不到設(shè)備的小型化便攜式需求,所以我們提出基于嵌入式的單幅衛(wèi)星圖片影像處理系統(tǒng)的方案
    發(fā)表于 01-30 14:04 ?0次下載

    火星探測(cè)器什么時(shí)候登陸火星_火星探測(cè)器飛行速度是多少

    火星探測(cè)器,是一種用來(lái)探測(cè)火星的人造航天器,包括從火星附近掠過的太空船、環(huán)繞火星運(yùn)行的人造衛(wèi)星、登陸火星表面的著陸器、可在
    發(fā)表于 12-14 15:08 ?1.1w次閱讀

    如何通過html+css樣式和js的方式實(shí)現(xiàn)星星圖的效果

    在瀏覽一些圖片網(wǎng)站的時(shí)候,經(jīng)常會(huì)看到很多的漂亮的星空?qǐng)D,比如,下面的圖片。其實(shí)這種星星圖片的效果,也可以通過html+css樣式和js的方式來(lái)實(shí)現(xiàn)。今天教大家如何實(shí)現(xiàn)星星圖的效果。
    的頭像 發(fā)表于 12-24 18:13 ?1903次閱讀

    美國(guó)“毅力號(hào)”火星車成功登陸火星

    當(dāng)?shù)貢r(shí)間2月18日下午,美國(guó)“毅力號(hào)”火星車成功登陸火星,成為美國(guó)國(guó)家航空航天局(NASA)第5個(gè)成功登陸的火星車。 據(jù)悉,本次“毅力號(hào)”將在火星采集樣本并試圖尋找生命存在的證據(jù)。 N
    的頭像 發(fā)表于 02-19 09:27 ?2608次閱讀

    美國(guó)毅力號(hào)火星車成功登陸火星

    當(dāng)?shù)貢r(shí)間2月18日下午,美國(guó)“毅力號(hào)”火星車成功登陸火星,成為美國(guó)國(guó)家航空航天局(NASA)第5個(gè)成功登陸的火星車。
    的頭像 發(fā)表于 02-19 09:39 ?4793次閱讀

    用來(lái)細(xì)致觀察火星的“火眼金睛”是如何“煉”成的

    “高分辨率相機(jī)是火星探測(cè)器的重要載荷。”高分辨率相機(jī)主任設(shè)計(jì)師董吉洪說(shuō),此次探測(cè)任務(wù)的工程目標(biāo)是實(shí)現(xiàn)火星環(huán)繞探測(cè)和巡視探測(cè),獲取火星探測(cè)科學(xué)數(shù)據(jù),而高分辨率相機(jī)搭載在環(huán)繞器上,主要用于對(duì)火星
    的頭像 發(fā)表于 03-09 14:24 ?1600次閱讀
    主站蜘蛛池模板: 午夜小影院| 99久热| 天天爽夜夜爽人人爽| 免费观看欧美一级片| yyy6080韩国三级理论| 不卡无毒免费毛片视频观看| 色麒麟影院| 国产精品香蕉成人网在线观看| 狠狠干b| 干干天天| 无遮挡很爽很污很黄的网站w| 日本wwwxx| 国产婷婷综合在线精品尤物| 阿v视频在线观看免费播放| 黄色在线观看网站| 456成人网| 中文字幕一区2区| 久热操| 中文字幕在线观看你懂的| 亚洲高清日韩精品第一区| 欧美成人性色生活片天天看| aa黄色片| 免费一级特黄特色大片在线观看 | 日韩精品毛片| 伊人成综合| 欧美视频一区二区三区在线观看| 男人视频在线观看| 亚洲欧美在线一区二区| 黄色永久免费| 久久久久激情免费观看| 四虎影院官网| 免费视频淫片aa毛片| 丁香月婷婷| 免费日本黄色网址| 天天干b| 天天伊人| 91综合网| 欧美性黑人极品hd网站| 乱人伦的小说| 四虎影院com| 国产伦子一区二区三区四区|