爬了10000張NASA關(guān)于火星探索的圖片茂腥,我發(fā)現(xiàn)了一個(gè)秘密

前言

最近,我使用爬蟲技術(shù)切省,爬取了美國(guó)航空航天局最岗,也就是你電影里經(jīng)常見到的 NASA, 火星探索的相關(guān)圖片,有 10000 張吧朝捆。

嗯嗯般渡,小事情,小事情。

完事兒之后驯用,有點(diǎn)小激動(dòng)脸秽,于是就有了這篇文章,將有以下內(nèi)容:

  1. 我為什么要爬取NASA的圖片
  2. 我是如何爬取NASA圖片的(超詳細(xì))
  3. 我得到了什么(高清大圖)
  4. 我發(fā)現(xiàn)了什么秘密(超勁爆)

我為什么要爬NASA的圖片

我已經(jīng)超過35了蝴乔,瑟瑟發(fā)抖啥時(shí)候被開了记餐。

天天想著萬一哪天失業(yè)了干點(diǎn)啥,想著玩?zhèn)€自媒體吧薇正,天天給大家瞎白話片酝。白話點(diǎn)歷史謎團(tuán),宇宙奧秘啥的挖腰,于是我就盯上了 NASA雕沿。

NASA 有各種宇宙探索任務(wù),并且有相關(guān)的文章曙聂,訪談晦炊,圖片,視頻公開宁脊,這是不可多得的資源庫断国。

我是如何爬取NASA圖片的(超詳細(xì))

NASA 的網(wǎng)站是可以公開訪問的,地址是

https://www.nasa.gov/
微信圖片_20210630130517.png

打開以后榆苞,它首頁長(zhǎng)這樣稳衬,可以看到各種內(nèi)容。右上角還有個(gè)搜索框坐漏,我們輸入 Mars 也就是 火星

稍等片刻薄疚,會(huì)展示出與 Mars 相關(guān)的各種內(nèi)容,其中有一項(xiàng) Mars Exploration 也就是 火星探索

點(diǎn)開之后赊琳,就到了一個(gè)新頁面街夭,然后找到 Images 圖片,就到了我們爬取的目標(biāo)頁

https://www.nasa.gov/mission_pages/mars/images/index.html
微信圖片_20210630130632.png

頁面下拉躏筏,你將會(huì)看到有個(gè)大大的按鈕板丽,上面寫著 MORE IMAGES, 點(diǎn)擊試試你就發(fā)現(xiàn):

頁面的內(nèi)容趁尼,并不是頁面直接加載的埃碱,而是通過 api 請(qǐng)求后,異步渲染的

F12, 打開瀏覽器開發(fā)者模式,重新執(zhí)行剛才的步驟酥泞,觀察請(qǐng)求信息砚殿,發(fā)現(xiàn)都會(huì)有如下的情況

微信圖片_20210630123102.png

看上去這個(gè)url地址非常重要,我們先看他的請(qǐng)求地址:

https://www.nasa.gov/api/2/ubernode/_search?size=24&from=24&sort=promo-date-time%3Adesc&q=((ubernode-type%3Aimage)%20AND%20(topics%3A3152))&_source_include=promo-date-time%2Cmaster-image%2Cnid%2Ctitle%2Ctopics%2Cmissions%2Ccollections%2Cother-tags%2Cubernode-type%2Cprimary-tag%2Csecondary-tag%2Ccardfeed-title%2Ctype%2Ccollection-asset-link%2Clink-or-attachment%2Cpr-leader-sentence%2Cimage-feature-caption%2Cattachments%2Curi

注意看里面的參數(shù)

size=24&from=24

很顯然芝囤,size 就是每次請(qǐng)求圖片的數(shù)量似炎,from 經(jīng)過試驗(yàn)辛萍,是查詢初始位置,我們可以改它來獲取其他內(nèi)容

我們?cè)賮砜纯此姆祷匦畔ⅲ?/p>

{
    "took": 3,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 659,
        "max_score": null,
        "hits": [{
            "_index": "nasa-public",
            "_type": "ubernode",
            "_id": "450040",
            "_score": null,
            "_source": {
                "image-feature-caption": "Mars 2020 rover underwent an eye exam after several cameras were installed on the rover. ",
                "topics": ["3140", "3152"],
                "nid": "450040",
                "title": "NASA 'Optometrists' Verify Mars 2020 Rover's 20/20 Vision",
                "type": "ubernode",
                "uri": "/image-feature/jpl/nasa-optometrists-verify-mars-2020-rovers-2020-vision",
                "collections": ["4525", "5246"],
                "link-or-attachment": "link",
                "missions": ["6336"],
                "primary-tag": "6336",
                "cardfeed-title": "NASA 'Optometrists' Verify Mars 2020 Rover's 20/20 Vision",
                "promo-date-time": "2019-08-05T17:49:00-04:00",
                "secondary-tag": "3140",
                "master-image": {
                    "fid": "603128",
                    "alt": "Engineers test cameras on the top of the Mars 2020 rover’s mast and front chassis. ",
                    "width": "1600",
                    "id": "603128",
                    "title": "Engineers test cameras on the top of the Mars 2020 rover’s mast and front chassis. ",
                    "uri": "public://thumbnails/image/pia23314-16.jpg",
                    "height": "900"
                },
                "ubernode-type": "image"
            },
            "sort": [1565041740000]
        }, {
            "_index": "nasa-public",
            "_type": "ubernode",
            "_id": "433172",
            "_score": null,
            "_source": {
                "image-feature-caption": "NASA still hasn't heard from the Opportunity rover, but at least we can see it again.",
                "topics": ["3152"],
                "nid": "433172",
                "title": "Opportunity Emerges in a Dusty Picture",
                "type": "ubernode",
                "uri": "/image-feature/opportunity-emerges-in-a-dusty-picture",
                "collections": ["7628"],
                "link-or-attachment": "link",
                "missions": ["3639"],
                "primary-tag": "3152",
                "cardfeed-title": "Opportunity Emerges in a Dusty Picture",
                "promo-date-time": "2018-09-26T12:39:00-04:00",
                "secondary-tag": "7628",
                "master-image": {
                    "fid": "584263",
                    "alt": "NASA's Opportunity rover appears as a blip in the center of this square",
                    "width": "1400",
                    "id": "584263",
                    "title": "NASA's Opportunity rover appears as a blip in the center of this square",
                    "uri": "public://thumbnails/image/pia22549-16.jpg",
                    "height": "788"
                },
                "ubernode-type": "image"
            },
            "sort": [1537979940000]
        }]
    }
}

上面的 json 內(nèi)容太長(zhǎng)羡藐,我刪除了一些重復(fù)的叹阔,實(shí)際上 hits 這個(gè)數(shù)組,也是24個(gè)传睹,和頁面上顯示的圖片數(shù)量是一樣的。那基本可以斷定岸晦,頁面上的信息欧啤,就是從這個(gè)數(shù)組來的。

進(jìn)而對(duì)比發(fā)現(xiàn)启上,master-image字段下邢隧,就是我們需要的信息,包括 圖片地址, 圖片尺寸, 圖片標(biāo)題冈在。

下面就上代碼倒慧,組裝請(qǐng)求URL, 獲取內(nèi)容,下載圖片 三步走

我使用了 Dart 語言包券,你們隨意

import 'dart:convert';
import 'package:dio/dio.dart';

main() async {
  // 每頁數(shù)量是固定24個(gè),改變初始值即可
  for (int from = 0; from < 24 * 100; from = from + 24) {
    await getPage(from);
  }
}

//獲取每一頁的信息并且下載
Future<void> getPage(int from) async {
  String url = 'https://www.nasa.gov/api/2/ubernode/_search?size=24&from=' +
      from.toString() +
      '&sort=promo-date-time%3Adesc&q=((ubernode-type%3Aimage)%20AND%20(topics%3A3152))&_source_include=promo-date-time%2Cmaster-image%2Cnid%2Ctitle%2Ctopics%2Cmissions%2Ccollections%2Cother-tags%2Cubernode-type%2Cprimary-tag%2Csecondary-tag%2Ccardfeed-title%2Ctype%2Ccollection-asset-link%2Clink-or-attachment%2Cpr-leader-sentence%2Cimage-feature-caption%2Cattachments%2Curi';

  //獲取到內(nèi)容
  var res = await Dio().get(url);
  var map = jsonDecode(res.toString());

  (map['hits']['hits'] as List<dynamic>).forEach((element) async {
    Uri fileUri = Uri.parse(getUri(element));
    String savePath = getSavePath(element);

    await Dio().downloadUri(fileUri, savePath);
    print('已下載: ' + savePath);
  });
}

//獲取圖片下載地址
String getUri(dynamic element) {
  String uri = element['_source']['master-image']['uri'].toString();

  uri = uri.replaceAll('public://',
      'https://www.nasa.gov/sites/default/files/styles/full_width_feature/public/');

  return uri;
}

//處理信息纫谅,并且返回圖片保存地址
String getSavePath(dynamic element) {
  String id = element['_id'];
  String fid = element['_source']['master-image']['fid'].toString();
  String title = element['_source']['master-image']['title'].toString();
  String uri = element['_source']['master-image']['uri'].toString();

  String savePath =
      id + '_' + fid + '_' + title.trim() + '.' + uri.split('.').last;
  savePath = savePath.replaceAll('/', '');
  savePath = savePath.replaceAll('\\', '');
  savePath = savePath.replaceAll('"', '');
  savePath = 'images/' + savePath;

  return savePath;
}

上面的代碼,還是很簡(jiǎn)單的溅固,有經(jīng)驗(yàn)的同學(xué)應(yīng)該一看就懂付秕。

走起來吧。

已下載: images/470436_643588_This is the third color image taken by NASA’s Ingenuity helicopter.jpg
已下載: images/470435_643587_This is the second color image taken by NASA’s Ingenuity helicopter.jpg
已下載: images/468546_639327_This is the first high-resolution, color image to be sent back by the Hazard Cameras (Hazcams).jpg
已下載: images/452007_605784_Danielson Crater on Mars.jpg
已下載: images/458478_615132_Gullies on Mars.jpg
已下載: images/469416_641582_A field of sand dunes occupies this frosty 5-kilometer diameter crater in the high-latitudes of the northern plains of Mars..jpeg
已下載: images/458075_614251_Mars 2020 With Sample Tubes (Artist's Concept).jpg
已下載: images/470381_643473_CME.jpg
已下載: images/458813_615896_Mars.jpg
已下載: images/467026_635309_Illustration of NASA’s Perseverance rover begins its descent through the Martian atmosphere.jpg
已下載: images/470438_643591_This black and white image was taken by NASA’s Ingenuity helicopter during its third flight on April 25, 2021.jpg
已下載: images/465488_631398_Cliffs in Ancient Ice on Mars.jpg
已下載: images/463659_626874_Avalanche on Mars.jpg
已下載: images/470251_643164_This image from NASA’s Perseverance rover shows the agency’s Ingenuity Mars Helicopter right after it successfully completed a high-speed spin-up test..jpeg
已下載: images/468636_639726_Mars' Jezero Crater.jpg

我得到了什么

這些圖片

微信圖片_20210630121020.png

還有這些


微信圖片_20210630131701.png

圖片侍郭,圖片標(biāo)題都有了, 夠看一個(gè)月了我估計(jì)询吴。

我發(fā)現(xiàn)了什么秘密

429059_580437_two images of mars, one clear, one fuzzy.png

這張圖,我最喜歡了亮元。一個(gè)如此清晰猛计,一個(gè)如此渾濁,這是為什么爆捞? 火星人的裂縫產(chǎn)生器奉瘤?

好吧,真正的秘密是:

NASA 的網(wǎng)站竟然沒有防采集嵌削,不信你也試試毛好。。苛秕。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末肌访,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子艇劫,更是在濱河造成了極大的恐慌吼驶,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,348評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蟹演,居然都是意外死亡风钻,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門酒请,熙熙樓的掌柜王于貴愁眉苦臉地迎上來骡技,“玉大人,你說我怎么就攤上這事羞反〔茧” “怎么了?”我有些...
    開封第一講書人閱讀 156,936評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵昼窗,是天一觀的道長(zhǎng)是趴。 經(jīng)常有香客問我,道長(zhǎng)澄惊,這世上最難降的妖魔是什么唆途? 我笑而不...
    開封第一講書人閱讀 56,427評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮掸驱,結(jié)果婚禮上肛搬,老公的妹妹穿的比我還像新娘。我一直安慰自己亭敢,他們只是感情好滚婉,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著帅刀,像睡著了一般让腹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上扣溺,一...
    開封第一講書人閱讀 49,785評(píng)論 1 290
  • 那天骇窍,我揣著相機(jī)與錄音,去河邊找鬼锥余。 笑死腹纳,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的驱犹。 我是一名探鬼主播嘲恍,決...
    沈念sama閱讀 38,931評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼雄驹!你這毒婦竟也來了佃牛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,696評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤医舆,失蹤者是張志新(化名)和其女友劉穎俘侠,沒想到半個(gè)月后象缀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,141評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡爷速,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評(píng)論 2 327
  • 正文 我和宋清朗相戀三年央星,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惫东。...
    茶點(diǎn)故事閱讀 38,625評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡莉给,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出廉沮,到底是詐尸還是另有隱情禁谦,我是刑警寧澤,帶...
    沈念sama閱讀 34,291評(píng)論 4 329
  • 正文 年R本政府宣布废封,位于F島的核電站,受9級(jí)特大地震影響丧蘸,放射性物質(zhì)發(fā)生泄漏漂洋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評(píng)論 3 312
  • 文/蒙蒙 一力喷、第九天 我趴在偏房一處隱蔽的房頂上張望刽漂。 院中可真熱鬧,春花似錦弟孟、人聲如沸贝咙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽庭猩。三九已至,卻和暖如春陈症,著一層夾襖步出監(jiān)牢的瞬間蔼水,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工录肯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留趴腋,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓论咏,卻偏偏與公主長(zhǎng)得像优炬,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子厅贪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容