如何检测从此站点请求数据的方法?

时间:2016-07-23 03:46:17

标签: python url web

更新:我已将以下脚本放在一起,以使用XML 的网址,而不使用{{中所建议的类似时间代码的后缀 3}},并报告在网站上明显波动的下行链路功率。我得到了三个小时,不变的数据。

所以看起来我需要正确构建它(时间码?授权?密码?)才能成功完成。就像我在下面的评论中所说," 我不想做任何不允许和欢迎的事情 - 美国宇航局已经有足够的挑战试图与四十年前的太空船交谈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']

我想跟踪answer below(DSN)与之通信的航天器,比如每分钟一次。

我从我的NASA Deep Space Network的答案中学到了如何从Flight Radar 24做类似的事情,这仍然代表了我目前从网站获取数据的技能。

对于FR24,我在previous question作为一个很好的起点进行了解释。我已经在Chrome浏览器中使用开发人员工具功能打开了页面,我可以看到菜肴,航天器和相关数字数据等项目的数据是以XML格式请求的,例如

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

所以看起来我需要在每分钟r=之后构造一个整数(时间码?授权?密码?)。

我的问题:使用python,我怎样才能最好地找出整数代表什么,以及如何生成它以便每分钟正确地请求一次数据?

this blog

上图:美国国家航空航天局的DSN现在页面enter image description here的屏幕截图蒙太奇也参见https://eyes.nasa.gov/dsn/dsn.html

2 个答案:

答案 0 :(得分:1)

在get参数中使用随机数(或时间戳...)会诱使浏览器真正发出请求(而不是使用浏览器缓存)。

这种方法是webdev使用的某种“黑客”,这样他们就可以确定请求确实发生了。

由于您没有使用网络浏览器,我很确定您可以完全忽略此参数,并且仍然可以获得刷新的数据。

---编辑---

实际上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设置为任何值并递增即可。 (或使用时间戳)

答案 1 :(得分: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....