【问题标题】:using beautiful soup to print react text使用美丽的汤打印反应文本
【发布时间】:2020-12-11 00:10:01
【问题描述】:

我正在尝试使用漂亮的汤打印出文本

HTML代码如下:

<span class="C($tertiaryColor) Fz(12px) smartphone_Fz(xs)" data-reactid="42" xpath="1"><span data-reactid="43">Before hours:</span><!-- react-text: 44 --> <!-- /react-text --><!-- react-text: 45 -->7:49AM EDT<!-- /react-text --></span>

我尝试了很多方法,但似乎无法打印“Before hours:”和“7:49 AM EDT”。

编辑:这是我尝试过的

SpanTag = self.StockHttmlPageSoup.find_all("span",class_ ="C($tertiaryColor) Fz(12px) smartphone_Fz(xs)")
SpanText = SpanTag.find_all('span')
print(SpanText.find(string=True))

编辑:

该网站的链接是:https://uk.finance.yahoo.com/quote/AAPL?p=AAPL&.tsrc=fin-srch

【问题讨论】:

    标签: python html beautifulsoup


    【解决方案1】:

    鉴于您原始帖子中的示例,以下工作正常。

    from bs4 import BeautifulSoup
    
    s = "<span class="C($tertiaryColor) Fz(12px) smartphone_Fz(xs)" data-reactid="42" xpath="1"><span data-reactid="43">Before hours:</span><!-- react-text: 44 --> <!-- /react-text --><!-- react-text: 45 -->7:49AM EDT<!-- /react-text --></span>"
    
    soup = BeautifulSoup(s, "html.parser")
    
    print(soup.find("span", attrs={"class":"C($tertiaryColor) Fz(12px) smartphone_Fz(xs)"}).text.strip())
    

    输出:Before hours: 7:49AM EDT

    如果有多个 &lt;span&gt; 元素与 C($tertiaryColor) Fz(12px) smartphone_Fz(xs) 类,您可能希望运行

    results = soup.findAll("span", attrs={"class":"C($tertiaryColor) Fz(12px) smartphone_Fz(xs)"})
    

    将所有此类标签的列表返回给result 变量以供进一步处理。可以使用 .text 属性访问每个元素的内部文本,例如results[0].text.strip() 函数可以应用于返回的文本以删除任何前导/尾随空格,例如results[0].text.strip().

    重要提示:以上内容并未解决有关异常处理的问题或soup.find()/soup.findAll() 未返回任何元素的情况,这是为了最好地保持对所提出问题的关注.如果发生这些情况,编写代码以解决这些情况显然非常重要。

    【讨论】:

    • 您好,感谢您的回答,问题是,我提供的 html 代码是针对公司股票的,因此对于不同的公司股票,html 代码 &lt;/span&gt;&lt;!-- react-text: 44 --&gt; &lt;!-- /react-text --&gt;&lt;!-- react-text: 45 --&gt;7:49AM EDT&lt;!-- /react-text --&gt; 不会相同
    • 您能否提供一个示例,说明在 HTML 响应中出现的这些标签的选择?在没有看到这些与您的原始示例有何不同的情况下,我无法就如何解析它们提供任何建议。
    • @coderoftheday 对延迟回复表示歉意 - 已离开家。感谢您提供进一步的示例。我已经看过它并使用我原始答案中的代码测试了您的示例,它按预期工作正常 - 即打印After hours: 21 Aug, 7:47PM EDT。由于指定营业时间之前/之后的代码包含在具有相同类属性的&lt;span&gt; 标记中,因此您只需在我的原始答案中运行代码,它将输出响应中存在的任何一个(营业时间之前或之后)。请注意,这不包括错误处理。
    【解决方案2】:

    你试过没有“跨度”吗?

    SpanTag = self.StockHttmlPageSoup.find_all(class_="C($tertiaryColor) Fz(12px) smartphone_Fz(xs)")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-09
      • 2021-05-24
      • 1970-01-01
      • 1970-01-01
      • 2014-05-07
      • 2014-05-28
      相关资源
      最近更新 更多