如何在python中获取快速数据?

2024-06-16 13:48:35 发布

您现在位置:Python中文网/ 问答频道 /正文

各位。 我正在使用selenium进行一个python项目,以获取数据。 但是有一个问题,我必须每5分钟清理一次数据。 所以我用selenium运行chrome驱动程序,问题是seleniumscrape速度非常慢。 如果我运行这个项目,至少需要30分钟。我不能每5分钟获取一次数据。 如果你有这方面的经验,请帮助我。 如果你能给我其他的方法(比如漂亮的肥皂),我会很高兴的。 注意:我想要获取数据的这个站点是使用javascript呈现的。 这是我的源代码。我正在测试它

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import pandas as pd
import time
driver = webdriver.Chrome()
driver.set_window_size(800, 600)

tickerNames = []
finvizUrl = "https://finviz.com/screener.ashx?v=111&f=exch_nasd,geo_usa,sh_float_u10,sh_price_u10,sh_relvol_o2"
nasdaqUrl = "https://www.nasdaq.com/market-activity/stocks/"

tickerPrice = []
def openPage(url):
    driver.get(url)

def exitDrive():
    driver.quit()

def getTickers():
    tickers = driver.find_elements_by_class_name('screener-link-primary')
    for i in range(len(tickers)):
        tickerNames.append(tickers[i].text)
    return tickerNames

def comparePrice(tickers):
    for i in range(len(tickers)):
        openPage(nasdaqUrl+tickers[i])
        tickerPrice[i] = driver.find_element_by_class_name('symbol-page-header__pricing-price').text
    return tickerPrice
openPage(finvizUrl)
comparePrice(getTickers())
# getTickers()
print(comparePrice())

Tags: 数据项目fromimportdefdriverseleniumsh
1条回答
网友
1楼 · 发布于 2024-06-16 13:48:35

纳斯达克网站上似乎有一个API,您可以查询(使用网络工具找到),因此没有必要为此使用selenium。下面是一个使用requests获取数据的示例

import requests
import lxml.html
import time

FINVIZ_URL = "https://finviz.com/screener.ashx?v=111&f=exch_nasd,geo_usa,sh_float_u10,sh_price_u10,sh_relvol_o2"
NASDAQ_URL = "https://api.nasdaq.com/api/quote/{}/summary?assetclass=stocks"

headers = {
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Safari/605.1.15"
}

session = requests.Session()
session.headers.update(headers)

r = session.get(FINVIZ_URL)
# Get data using lxml xpath but use whatever you want
x = lxml.html.fromstring(r.text)
stocks = x.xpath("//*[@class='screener-link-primary']/text()")

for stock in stocks:
    data = session.get(NASDAQ_URL.format(stock))
    print(f"INFO for {stock}")
    print(data.json())  # This might have the data you want
    # Sleep in case there is a rate limit (may not be needed)
    time.sleep(5)  

相关问题 更多 >