当前位置: 首页 > 知识库问答 >
问题:

使用BeautifulSoup刮特定“span”类时遇到麻烦

漆雕原
2023-03-14

我正在浏览https://ca.finance.yahoo.com/quote/aapl并想要得到股票价格的变化,绿色/红色文本。我已经能够刮除股票价格,但不能改变价值,因为他们位于相同的“div”类,但不同的“span”类。

我想要的文本:“-3.89(-1.36%)”-数字会有所不同

来自网站得HTML:

    <div class="My(6px) Pos(r) smartphone_Mt(6px)" data-reactid="29">
        <div class="D(ib) Va(m) Maw(65%) Ov(h)" data-reactid="30">
            <div class="D(ib) Mend(20px)" data-reactid="31"><span class="Trsdu(0.3s) Fw(b) 
             Fz(36px) Mb(-4px) D(ib)" data-reactid="32">282.80</span>
                   <span class="Trsdu(0.3s) Fw(500) Pstart(10px) Fz(24px) C($negativeColor)" 
                    data-reactid="33">-3.89 (-1.36%)</span>

我用什么得到的价格:(282.80)-价格可能不同

stockLink = ('https://ca.finance.yahoo.com/quote/AAPL')
stockPage = requests.get(stockLink)
stockSoup = BeautifulSoup(stockPage.text, 'lxml')
stockQuote = stockSoup.find('div', {'class': 
                                       'My(6px)Pos(r)smartphone_Mt(6px)'}).find('span').text 
print(stockQuote)
                 

我已经尝试了许多改变类名、span名和使用data-reactid的变体,但似乎都不起作用,它们都输出一个空的“[]”。

非常感谢。

共有1个答案

夏奕
2023-03-14

看来问题出在这一行

stockQuote = page_soup.find('div', {'class': 'My(6px)Pos(r)smartphone_Mt(6px)'}).find('span').text

类名应该用空格分隔,因为它们在HTML中都是不同的类。

解决方案是将它们分开,就像您在页面HTML中看到的那样。它看起来像这样(类标识符中添加了两个空格):

stockQuote = page_soup.find('div', {'class': 'My(6px) Pos(r) smartphone_Mt(6px)'}).find('span').text

但是,这将返回红色/绿色文本之前的数字。由于在这个div中有多个跨度,您必须找到所有的跨度。我是这样做的:

stockQuote = page_soup.find('div', {'class': 'My(6px) Pos(r) smartphone_Mt(6px)'}).findAllNext('span')
stockQuote = stockQuote[1].text

findAllNext函数将查找该div中的跨度。它返回大约36,但你要找的是第二个。然后,您只需要从它获得文本,就像您以前做的那样,它应该返回您正在寻找的数字。

虽然web刮取是一个很好的工具,但它可能值得研究一下雅虎的yfinance API。

 类似资料:
  • 我正在尝试刮网页,在那里我需要解码整个表到一个数据帧。我正为此使用漂亮的汤。在某些标记中,有一些标记没有任何文本。但这些值会显示在网页上的特定span标记中。 下面的代码对应于该网页, 但是,这个标记中显示的值是。我试着删掉它,但我收到的是空短信。 如何刮这个价值使用美丽的汤。 URL:https://en.tutiempo.net/climate/ws-432950.html 下面给出了我的用于

  • 嗨,我想刮与美丽的汤,但通常iframe src应该是一个html链接,这次我遇到一个wordpress URL,基本上是文件夹结构,导致PHP文件。 我在想有没有什么办法可以把那个文件里的桌子刮开? 当我检查Chrome中的元素时,表DIV标记存在,然而,当我用BeautifulSoup加载链接时,iframe中的内容就会消失(表)。 请帮忙

  • 我是新来的React Native,刚刚用React Native init rnapp命令创建了一个应用程序,它发出了许多警告: 然后我转到android文件夹并运行以下命令: 但我明白了: * 有人知道如何修复这个问题,并在这个空应用程序上为Android构建apk文件吗?

  • 问题内容: 这不是让我输入我的名字,但是年龄确实可以。我知道我可以更改语句的顺序,但是还有另一种方法可以做到吗? 问题答案: 您的问题是,下一个int不考虑输入在您的姓名部分中的换行符。因此,名称返回为空白。 您可以通过两种方式更改代码: 要么 我个人喜欢第二种方式。

  • 我正在从一个文件中读取文本,但在试图将和读入两个不同的时遇到了困难。指示第一个列表的结束位置。我试过使用数组,但数组只存储最后一个*符号。 以下是我目前尝试的方法:

  • 我正在使用Python Anaconda将数据刮到Excel表单中。我遇到了两个网站的麻烦。 站点1 null null null 我在试着拉跨度标题。我尝试过的东西(我也以find_all的形式尝试过它们): 我肯定也有我尝试过的其他事情没有列出,因为我不是全部都记得。我不是程序员,我只是想弄清楚这一点来拉数据进行分析。救命? 站点2 我需要从下面的html中提取值8,052。 我试过: tex