【问题标题】:Extracting text from span tag with BeautifulSoup使用 BeautifulSoup 从 span 标签中提取文本
【发布时间】:2021-09-01 15:58:03
【问题描述】:

我试图从这个span 标签中获得价值26.70

<span class="Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)" data-reactid="31">26.70</span>

我试过了:

html_text2=requests.get('https://finance.yahoo.com/quote/WRD.PA?p=WRD.PA&.tsrc=fin-srch').text
soup2 = BeautifulSoup(html_text2,'lxml')
data = soup2.select_one('span.Fz(36px)').text.strip()
print(data)

但我收到此错误:

soupsieve.util.SelectorSyntaxError: Invalid character '(' position 7
  line 1:
span.Fz(36px)
       ^

【问题讨论】:

  • 您的错误似乎在第 1 行,此处未包含...
  • 尝试转义括号:Fz\(36px\)

标签: python html beautifulsoup


【解决方案1】:

也许避免动态类以寻找更稳定的元素,如有必要,使用它们之间的关系来定位该节点:

import requests
from bs4 import BeautifulSoup as bs

r = requests.get('https://finance.yahoo.com/quote/WRD.PA?p=WRD.PA&.tsrc=fin-srch', headers = {'User-Agent':'Mozilla/5.0'})
soup = bs(r.content, 'lxml')
print(soup.select_one('div:has(> #quote-market-notice) > span').text)

【讨论】:

    【解决方案2】:

    如果你愿意,你可以在没有 BeautifulSoup 的情况下做到这一点:

    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.implicitly_wait(10)
    driver.get('https://finance.yahoo.com/quote/WRD.PA?p=WRD.PA&.tsrc=fin-srch')
    element = driver.find_element_by_class_name("Fz\(36px\)")
    print(element.text)
    

    【讨论】: