2016-07-27 91 views
-1

我有一個問題,我首先想到很多人會遇到,但我找不到任何類似的問題。我使用的語言是PythonPython:從網站代碼中讀取值

我想從一個網站讀取一個特定的值,它嵌入在另一個代碼後面。我首先想到this approach here可以工作。 (下載html頁面,然後閱讀特定的行)。但問題是,我正在尋找的價值是不斷在另一個班級或代碼中產生的。所以基本上,當我試圖用Chrome查看html代碼時,我無法找到我的首選值。

我想讀的頁面:Page。我需要的價格是單價爲歐元

我感謝您的幫助!

+0

歡迎詢問問題時是這樣,請更具體一點:你有什麼嘗試過,你期望什麼等等。請參閱[如何提問] – Nehal

+0

如果這個值是由javascript生成的,你將需要像硒這樣的東西來提取它 –

+0

我基本上下載了該頁面的html並搜索了該值。但是這個值是由一個javascript函數創建的。那麼我如何使用python中的代碼訪問我需要的值? – Chris

回答

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 
+0

值得注意的是,的寫法,即使在您從下拉列表中選擇不同的貨幣後,網站上似乎也存在一個錯誤,即每個貨幣值定期更新始終是美元計算。 – MattH

+0

反正謝謝!你從哪裏看到數據來自json blob? – Chris

+1

我猜想,情況就是這樣,並在chrome開發工具中尋找XHR。 – MattH

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的,轉換爲字符串。

我現在面臨的問題是,輸出的是一樣的東西:€12.99
我如何刪除歐元符號,所以我可以轉換字符串到浮動?

我有權發佈此作爲答案,因爲有人downvoted我沒有理由,所以我不能問另外一個問題今天..

+0

我終於明白了!由於歐元符號總是字符0,我可以使用下面的代碼:a = float(a [1:])。沒想到這可能是如此簡單:) – Chris