【问题标题】:Using BeautifulSoup for html scraping使用 BeautifulSoup 进行 html 抓取
【发布时间】:2015-10-19 19:25:13
【问题描述】:

所以我正在尝试制作一个程序来告诉用户航海者 1 号离地球有多远,美国宇航局在他们的网站上有这个信息http://voyager.jpl.nasa.gov/where/index.html... 我似乎无法在 div 中获取信息,这是 div:<div id="voy1_km">Distance goes here</div>

我目前的程序如下:`

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

长话短说,我如何获取 div 内容?

【问题讨论】:

  • 输出是什么?尝试打印响应 html 和汤,以检查它是否在任何地方中断
  • 它只是输出
    ...
  • 查看来源,
    里面什么都没有。 JS 提供变化的值

标签: html python-2.7


【解决方案1】:

从网页本身可以看出,距离在不断变化,这实际上是由Javascript 驱动的。您也许可以只阅读 javascrip 代码,这样您甚至不需要刮擦即可获得距离...(我和您一样讨厌使用 Javascript 的网站:))

如果您真的想从他们的网站上获取号码。您可以使用硒。

# 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

当然,请参阅他们网站的条款和条件,了解您可以抓取他们的网站并分发数据的级别。

【讨论】:

  • 谢谢这个工作,有没有办法从像ububtu服务器这样的操作系统运行它?据我所知,由于缺少网络浏览器而出错
  • 好的,请参考this文章如何设置无头浏览器。
【解决方案2】:

更大的问题是为什么还要费心去刮它。如果您深入了解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))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    • 2020-10-04
    相关资源
    最近更新 更多