2015-10-19 307 views
0

所以我试图做一个程序,告诉用户多远,旅行者1号是从地球上,美国航空航天局有这方面的信息在他们的网站http://voyager.jpl.nasa.gov/where/index.html ... 我似乎无法管理在专区内获得的信息,这里的DIV:<div id="voy1_km">Distance goes here</div>使用BeautifulSoup的HTML抓取

我现在的程序如下:`

import requests 
from BeautifulSoup import BeautifulSoup 


url = "http://voyager.jpl.nasa.gov/where/index.html" 
response = requests.get(url) 
html = response.content 
soup = BeautifulSoup(html) 
test = soup.find('div', {'id' : 'voy1_km'}) 

print test 

所以长话短说,我如何获得的股利内容?

+0

什么是输出?尝试打印回应HTML和汤,检查它是否破的任何地方 – MohitC

+0

它只是输出

...

+1

检查来源,

什么也没有。改变的价值由JS – MohitC

回答

2

从网页本身可以看到,距离不断变化,实际上由Javascript驱动。你可能只是阅读javascrip代码,所以你甚至不需要刮去以获得距离......(我讨厌使用JavaScript的网站和你一样:))

如果你真的想让数字他们的网站。你可以使用Selenium。

# pip install selenium 
from selenium import webdriver 
import time 

driver = webdriver.Firefox() 
driver.get("http://voyager.jpl.nasa.gov/where/index.html") 
time.sleep(5) 
elem = driver.find_element_by_class_name("tr_dark") 
print elem.text 
driver.close() 

这里是输出:

Distance from Earth 
19,964,147,071 KM 
133.45208042 AU 

当然,请参考条款他们的网站&条件就到什么水平,你可以刮他们的网站和分发数据。

+0

提供谢谢这工作,有没有办法从像ububtu服务器的操作系统运行这个?据我可以告诉它由于缺乏网络浏览器而出现错误 –

+0

当然,请参阅[this](http://scraping.pro/use-headless-firefox-scraping-linux/)文章中有关如何设置无头浏览器。 –

0

更大的问题是为什么即使打扰它。如果您深入了解Javascript file,您可以以非常简单的方式重复计算:

import time 

epoch_0 = 1445270400 
epoch_1 = 1445356800 

dist_0_v1 = 19963672758.0152 
dist_1_v1 = 19966727483.2612 

current_time = time.time() 

current_dist_km_v1 = (((current_time - epoch_0)/(epoch_1 - epoch_0)) * (dist_1_v1 - dist_0_v1)) + dist_0_v1 

print("{:,.0f} KM".format(current_dist_km_v1))