2016-07-23 53 views
1

更新:我已經把下面的腳本使用的URL XML 沒有時間碼樣的後綴作爲answer below建議,並報告了下行的力量,其在網站上清楚地波動。我正在收到三個小時的不變數據。如何檢測從本網站請求數據的方法?

所以它看起來像我需要正確構建(時間碼?授權?祕密密碼?)才能成功完成此操作。就像我在評論說以下,「我不想做任何事情,是不允許的,歡迎 - 美國航空航天局有足夠的挑戰已經開始嘗試跟一個四十歲的飛船20十億公里遠!」

def dictify(r,root=True): 
    """from: https://stackoverflow.com/a/30923963/3904031""" 

    if root: 
     return {r.tag : dictify(r, False)} 
    d=copy(r.attrib) 
    if r.text: 
     d["_text"]=r.text 
    for x in r.findall("./*"): 
     if x.tag not in d: 
      d[x.tag]=[] 
     d[x.tag].append(dictify(x,False)) 
    return d 

import xml.etree.ElementTree as ET 
from copy import copy 
import urllib2 

url = 'https://eyes.nasa.gov/dsn/data/dsn.xml' 

contents = urllib2.urlopen(url).read() 
root = ET.fromstring(contents) 
DSNdict = dictify(root) 
dishes = DSNdict['dsn']['dish'] 
dp_dict = dict() 
for dish in dishes: 
    powers = [float(sig['power']) for sig in dish['downSignal'] if sig['power']] 
    dp_dict[dish['name']] = powers 

print dp_dict['DSS26'] 

我想跟蹤與NASA Deep Space Network(DSN)通信的航天器,例如每分鐘一次。

我學會了如何從我的previous question的回答中得到飛行雷達24的相似信息,這也代表了我目前從網站獲取數據的技能。

隨着FR24我在this blog作爲一個偉大的地方開始解釋。我曾與開發工具在Chrome瀏覽器功能打開網頁,我可以看到的物品,如餐具,航天器和相關的數字數據的數據請求爲XML處理URL如

https://eyes.nasa.gov/dsn/data/dsn.xml?r=293849023 

所以看起來我需要在r=之後每分鐘一次構造整數(時間碼?授權?密碼?)。

我的問題:使用python,我怎樣才能找到什麼整數代表,以及如何生成它以正確地請求數據每分鐘一次?

enter image description here

以上:美國宇航局現在DSN https://eyes.nasa.gov/dsn/dsn.html屏幕截圖蒙太奇又見this question

+0

檢查似乎連續的頁面,所以它不是某些祕密密鑰......事情是找出它代表什麼。它可能是一些事件,如Linux時間戳從1970/1/1 – Aquiles

+0

某些事件也許你可以只檢查一個特定的時間,看看數量和實際時間之間的差異,只是從那裏進行查詢 – Aquiles

+2

這裏它是:Math.floor(new Date()。getTime()/ 5000)它在sites.js文件中 – Aquiles

回答

1

在GET參數招數使用隨機數(或時間戳...)的瀏覽器變成真提出請求(而不是使用瀏覽器緩存)。

此方法是某種「黑客」的webdevs使用,以便他們確信請求實際上發生。

由於您沒有使用網絡瀏覽器,我敢肯定,您完全可以忽略此參數,並仍然可以刷新數據。

---編輯---

其實r似乎是必需的,並且必須進行更新。

#!/bin/bash 
wget https://eyes.nasa.gov/dsn/data/dsn.xml?r=$(date +%s) -O a.xml -nv 
while true; do 
    sleep 1 
    wget https://eyes.nasa.gov/dsn/data/dsn.xml?r=$(date +%s) -O b.xml -nv 
    diff a.xml b.xml 
    cp b.xml a.xml -f 
done 

您不需要模擬瀏覽器。只需將r設置爲任意值並將其增加即可。(或使用時間戳)

+0

我相信它現在是乾淨的:-) –

+0

我曾經這樣使用過一次:https://pypi.python.org/pypi/xmltodict,它的工作原理如下 –

+0

到目前爲止,我一直在監測'[float(sig ['power'])對於['downSignal']]'中的sig,這是明顯波動的。這不適用於我 - 可能需要使用瀏覽器模擬器,如[本答案](http://stackoverflow.com/a/34459360/3904031)中的@alecxe所述。 – uhoh

1

關於您更新的問題,爲什麼避免發送r查詢字符串參數時很容易生成它?此外,在requests模塊,可以很容易地與太發送請求的參數:

import time 
import requests 
import xml.etree.ElementTree as ET 

url = 'https://eyes.nasa.gov/dsn/data/dsn.xml' 

r = int(time.time()/5) 
response = requests.get(url, params={'r': r}) 
root = ET.fromstring(response.content) 
# etc.... 
+0

我試圖在問題/答案範式內工作,與唯一答案的作者合作,並學習如何做到這一切該過程(因此腳本)。看起來你已經在幾秒鐘內發佈了這個消息,證實它使用了一個隨機數並接受了另一個答案。謝謝你的回答! – uhoh

+0

它似乎與URL字符串本身內的'?r = 42'參數一起工作,但您只是教會了我如何使用params字典 - 對我來說是一大好處,再次感謝! – uhoh