我有一个问题,我首先想到许多人会遇到,但我找不到任何类似的问题。我正在使用的语言是 Python 。
我想从网站上读取一个特定的值,该网站嵌入在另一个代码中。我首先想到this approach here可以奏效。 (下载html页面,然后读取特定行)。但问题是,我正在寻找的价值是在另一个类或代码中不断产生的。所以基本上当我试图用Chrome查看html代码时,我找不到我的首选值。
我想读的页面:Page。我需要的价值是欧元以太币价格。
感谢您的帮助!
答案 0 :(得分:1)
页面上的数据来自XHR加载的json blob,可以直接查询。
>>> import requests
>>> import pprint
>>> r = requests.get('http://ether.price.exchange/update')
>>> pprint.pprint(r.json())
{u'AUD': {u'15m': 873.83,
u'buy': 873.83,
u'last': 873.83,
u'sell': 873.85,
u'symbol': u'$'},
u'BRL': {u'15m': 2140.39,
u'buy': 2140.39,
u'last': 2140.39,
u'sell': 2140.42,
u'symbol': u'R$'},
u'CAD': {u'15m': 860,
u'buy': 860,
u'last': 860,
u'sell': 860.02,
u'symbol': u'$'},
u'CHF': {u'15m': 643.67,
u'buy': 643.67,
u'last': 643.67,
u'sell': 643.68,
u'symbol': u'CHF'},
u'CLP': {u'15m': 428297.17,
u'buy': 428297.17,
u'last': 428297.17,
u'sell': 428303.73,
u'symbol': u'$'},
u'CNY': {u'15m': 4359.5,
u'buy': 4359.5,
u'last': 4359.5,
u'sell': 4359.56,
u'symbol': u'\xa5'},
u'DKK': {u'15m': 4416.7,
u'buy': 4416.7,
u'last': 4416.7,
u'sell': 4416.76,
u'symbol': u'kr'},
u'EUR': {u'15m': 593.66,
u'buy': 593.66,
u'last': 593.66,
u'sell': 593.67,
u'symbol': u'\u20ac'},
u'GBP': {u'15m': 496.02,
u'buy': 496.02,
u'last': 496.02,
u'sell': 496.02,
u'symbol': u'\xa3'},
u'HKD': {u'15m': 5062.79,
u'buy': 5062.79,
u'last': 5062.79,
u'sell': 5062.87,
u'symbol': u'$'},
u'ISK': {u'15m': 79579.79,
u'buy': 79579.79,
u'last': 79579.79,
u'sell': 79581.01,
u'symbol': u'kr'},
u'JPY': {u'15m': 69110.23,
u'buy': 69110.23,
u'last': 69110.23,
u'sell': 69111.28,
u'symbol': u'\xa5'},
u'KRW': {u'15m': 742032.87,
u'buy': 742032.87,
u'last': 742032.87,
u'sell': 742044.24,
u'symbol': u'\u20a9'},
u'NZD': {u'15m': 933.8,
u'buy': 933.8,
u'last': 933.8,
u'sell': 933.82,
u'symbol': u'$'},
u'PLN': {u'15m': 2589.46,
u'buy': 2589.46,
u'last': 2589.46,
u'sell': 2589.5,
u'symbol': u'z\u0142'},
u'RUB': {u'15m': 42472.95,
u'buy': 42472.95,
u'last': 42472.95,
u'sell': 42473.6,
u'symbol': u'RUB'},
u'SEK': {u'15m': 5637.68,
u'buy': 5637.68,
u'last': 5637.68,
u'sell': 5637.77,
u'symbol': u'kr'},
u'SGD': {u'15m': 887.79,
u'buy': 887.79,
u'last': 887.79,
u'sell': 887.81,
u'symbol': u'$'},
u'THB': {u'15m': 22835.96,
u'buy': 22835.96,
u'last': 22835.96,
u'sell': 22836.31,
u'symbol': u'\u0e3f'},
u'TWD': {u'15m': 20965.35,
u'buy': 20965.35,
u'last': 20965.35,
u'sell': 20965.67,
u'symbol': u'NT$'},
u'USD': {u'15m': 652.7,
u'buy': 652.7,
u'last': 652.7,
u'sell': 652.71,
u'symbol': u'$'},
u'baseVolume': u'71691.55099130',
u'high': u'0.02070000',
u'high24hr': u'0.02070000',
u'highestBid': u'0.01957006',
u'id': 148,
u'isFrozen': u'0',
u'last': u'0.01956700',
u'low': u'0.01760000',
u'low24hr': u'0.01760000',
u'lowestAsk': u'0.01958372',
u'percentChange': u'0.07570270',
u'price': u'0.01956700',
u'quoteVolume': u'3802775.62565674',
u'volume': u'71691.55099130'}
阅读页面中的javascript,货币中1以太的价格为1 * data['price'] * data['EUR']['last']
:
>>> r = requests.get('http://ether.price.exchange/update')
>>> d = r.json()
>>> float(d['price']) * float(d['EUR']['last'])
11.562597087999999
答案 1 :(得分:0)
我能够从其他网页获取价值。代码如下所示:
def get_current_value():
chrome_path = r"C:\Users\Chris\Desktop\Chrome_driver\chromedriver.exe"
driver = webdriver.Chrome(chrome_path)
driver.get("https://cryptowatch.de/kraken/etheur")
a = driver.find_element_by_xpath("""//*[@id="price-ticker"]""").text
unicodedata.normalize("NFD",a)#.encode('ascii','ignore')
return a
我在此处unicodedata.normalize("NFD",a)#.encode('ascii','ignore')
添加了此代码,以将输出(显然是unicode)转换为字符串。
我现在面临的问题是,a的输出是这样的:€12.99
如何删除欧元符号,以便将字符串转换为浮点数?
我必须将此作为答案发布,因为有人在没有理由的情况下向我投票,所以今天我不能再问另一个问题了。