如何使用硒在网站上获取实时股价?

时间:2018-12-03 02:59:34

标签: javascript python html selenium web-scraping

我正在研究一个学校项目,以获取JPMorgan Website上的实时股价。我想获取<div class="price_area">中显示的所有数据。我已经尝试了beautifulsoup和yahoo api,但仍然无法获得我想要的东西。因此,这是我第一次尝试硒,但我不知道如何通过它运行javascript。这是我的代码:

def getStockPrice():
    driver = webdriver.Chrome()
    driver.get("http://www.jpmhkwarrants.com/en_hk/market-statistics/underlying/underlying-terms/code/1")
    try:
        stock_index = WebDriverWait(driver, 10).until(
            driver.find_element_by_class_name('price_area').find_element_by_class_name('price')
        )
    finally:
        driver.quit()

但是它显示错误'WebElement'是不可调用的。我如何获得实时价格,涨跌百分比和开盘价。谢谢。

3 个答案:

答案 0 :(得分:2)

要在.find_element_by_*中使用WebDriverWait,必须使用lambda之类的功能

stock_index = WebDriverWait(driver, 10).until(
     lambda d: d.find_element_by_class_name('price_area').find_element_by_class_name('price')
)

不要忘记致电.text来获取内容

def getStockPrice():
    driver = webdriver.Chrome()
    driver.get("http://www.jpmhkwarrants.com/en_hk/market-statistics/underlying/underlying-terms/code/0700")
    try:
        stock_index = WebDriverWait(driver, 10).until(
            lambda x: x.find_element_by_class_name('price_area')
        )
        price = stock_index.find_element_by_class_name('price')
        percentage = stock_index.find_element_by_css_selector('.percentage.rise')
        open_price = stock_index.find_element_by_css_selector('ul li span')

        print('Current price: ' + price.text)
        print('Percentage: ' + percentage.text)
        print('Open price: ' + open_price.text)

    except:
        print('wait timeout, element not found')
    finally:
        driver.quit()

答案 1 :(得分:1)

您可以使用requestsBeautifulSoup来获取通过Ajax查询字符串调用提到的三个项目

import requests
from bs4 import BeautifulSoup

url= 'http://www.jpmhkwarrants.com/en_hk/ajax/terms_quick_search?_=1543832902362'
res = requests.get(url)
soup = BeautifulSoup(res.content, "lxml")
items = [item.text for item in soup.select('.price,.percentage.rise,li:nth-of-type(3) span')]
print(items)

结果:

enter image description here


实时框具有自己的Ajax调用:

http://www.jpmhkwarrants.com/en_hk/ajax/market-terms-real-time-box/code/0700?_=1543832902364

您可以使用它来检索该框中的所有项目。

import requests
from bs4 import BeautifulSoup

url= 'http://www.jpmhkwarrants.com/en_hk/ajax/market-terms-real-time-box/code/0700?_=1543832902364'
res = requests.get(url)
soup = BeautifulSoup(res.content, "lxml")
items = [item.text.strip().split('\n') for item in soup.select('.price_area div')]
tidied = [item for sublist in items for item in sublist if item and item !='Change (%)']
print(tidied)

结果:

enter image description here

答案 2 :(得分:1)

该数据不是实时的。

通常您必须为实时数据付费。

如果您的项目涉及任何类型的纸张交易/分析,请知道从刮擦中拉出的所有物品可能会延迟5-15分钟。 我听说Bloomberg有免费的api,但我不知道实时数据是否免费。 签出Interactive Brokers API。我敢肯定,对数据的访问是免费的,它使您可以连接到模拟交易帐户来测试策略和算法。