python - 尝试按类抓取 HTML span 值,但返回错误

标签 python beautifulsoup python-requests

def getDOW():
    DowURL = ["https://finance.yahoo.com/quote/%5EDJI?p=^DJI"]
    # requests data on the website(s) above
    page = requests.get(DowURL, headers=headers)

    # parses HTML text from website
    soup = BeautifulSoup(page.content, "html.parser")

    # title = soup.find(class_="D(ib) Fz(18px)").get_text()
    name = soup.find(class_= "Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)").get_text()
    print (name)

返回错误:

raise InvalidSchema("No connection adapters were found for '%s' % url")
requests.exceptions.InvalidSchema: No connection adapters were found for '['https://finance.yahoo.com/quote/%5EDJI?p=^DJI']'

如果之前已经有人问过这个问题,我很抱歉,但我是 BeautifulSoup 的新手,所以我不确定发生了什么。如果有人可以帮助我或给我建议,我将不胜感激。我试图从多个站点中抓取值,但使用列表失败了,因此制作了单独的函数(我知道这是多么多余)并遇到了此错误。

最佳答案

当您查看页面的 HTML 源代码时,您会发现您感兴趣的对象不存在。原因可能是,只有在浏览器中加载页面后才会加载内容。您可以使用Selenium and Chrome driver去做这个。然而,这样加载数据的效率并不是很高。我过去曾这样做过,但这不是一个好的解决方案。

由于您似乎对股票价格感兴趣,因此可以使用以下方法:

import yfinance as yf
import datetime

start = datetime.datetime(2019,11,15)
end = datetime.datetime(2019,11,16)
data = yf.download('^DJI', start=start, end=end)
print(data)

结果:

[*********************100%***********************]  1 of 1 downloaded
                Open      High       Low     Close  Adj Close     Volume
Date
2019-11-14  27757.20  27800.71  27676.97  27781.96   27781.96  303970000
2019-11-15  27843.54  28004.89  27843.54  28004.89   28004.89  283720000

关于python - 尝试按类抓取 HTML span 值,但返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58903405/

相关文章:

python - 使用spark-submit和BeautifulSoup时出现UnicodeEncodeError

python - 为什么 aiohttp 比 run_in_executor 包装的请求慢?

Python、Beautiful Soup + 如何解析动态类?

python - blit 错误的目标位置无效,不知道如何处理

Python 请求库添加了一个附加 header "Accept-Encoding: identity"

python - 显示 "bar graph"中列表的内容

c++ - python函数作为c++暴露类的参数使用::boost::python

java - Python:以编程方式调整 .jpg 的大小

python - 如何使用Appium和Python定位元素?

python - 使用 BeautifulSoup/Python 迭代 DOM