【问题标题】:Need to get text from html using python BeautifulSoup需要使用 python BeautifulSoup 从 html 中获取文本
【发布时间】:2022-01-14 07:42:05
【问题描述】:

我卡住了,无法获取所需的数据,这是 html 代码

<div role="tabpanel" class="tab-pane active" id="final-results">
<div class="container-fluid">
    <div class="row">
        <div class="col-xs-12 instruction">
            <h4>Final and Return</h4>
        </div>
        <div class="col-xs-12 col-sm-3 non-printable">
            <img class="img-responsive rotate-card" src= "...">
        </div>
        <div class="col-xs-12 col-sm-3 text-center">
            <div class="data-box">
                <div class="name">Final Ending</div>
                <div class="value">123456789</div>
            </div>
        </div>
        <div class="col-xs-12 col-sm-3 text-center">
            <div class="data-box">
                <div class="name">Available Phase</div>
                <div class="value">250</div>
            </div>
        </div>
        <div class="col-xs-12 col-sm-3 text-center">
            <div class="data-box">
                <div class="name">Initial Phase</div>
                <div class="value">500</div>
            </div>

        </div>

这是我的python代码:

soup = BeautifulSoup(form_resp.content, features="html.parser")

    avail_phase = soup.find("div", text="Available Phase").find_parent("div", class_="value").text

    initial_phase = soup.find("div", text="Initial phase").find_parent("div", class_="value").text

    logger.info("Success! Final Number: {}".format(avail_phase))

    return {"initial_phase": initial_phase, "available_phase": avail_phase}

无论我做什么,我都会遇到同样的错误“最后一个错误:'NoneType' 对象没有属性'find_parent'”

请寻求帮助

【问题讨论】:

    标签: python python-3.x web-scraping beautifulsoup html-parsing


    【解决方案1】:

    如果您想从class='value' 行中抓取数据,那么您可以使用find_next_sibling,因为我看到class='value' 是您最初搜索的文本的兄弟(Available Phase 和@987654325 @)

    我必须告诉你,我只是在查看代码的基础上提供这个解决方案,因为我认为我目前没有办法对此进行测试。所以,试试这段代码,看看它是否有效。

    avail_phase = soup.find("div", text="Available Phase").find_next_sibling("div", class_="value").text
    
    
    initial_phase = soup.find("div", text="Initial phase").find_next_sibling("div", class_="value").text
    

    【讨论】:

      【解决方案2】:

      会发生什么?

      1. 您尝试使用find_parent("div", class_="value") 选择父级,但没有符合此条件的父级标记。

      2. 您选择的soup.find("div", text="Initial phase") 找不到标签,因为它需要与Initial phase 完全匹配

      如何解决?

      1. 更改为.find_next("div", class_="value").text.find_next("div").text.find_next_sibling("div").text以获取下一个&lt;div&gt;的文本

      2. text="Initial phase"更改为text="Initial Phase"以找到正确的&lt;div&gt;

      示例

      from bs4 import BeautifulSoup
      
      html='''
      <div class="col-xs-12 instruction">
                  <h4>Final and Return</h4>
              </div>
              <div class="col-xs-12 col-sm-3 non-printable">
                  <img class="img-responsive rotate-card" src= "...">
              </div>
              <div class="col-xs-12 col-sm-3 text-center">
                  <div class="data-box">
                      <div class="name">Final Ending</div>
                      <div class="value">123456789</div>
                  </div>
              </div>
              <div class="col-xs-12 col-sm-3 text-center">
                  <div class="data-box">
                      <div class="name">Available Phase</div>
                      <div class="value">250</div>
                  </div>
              </div>
              <div class="col-xs-12 col-sm-3 text-center">
                  <div class="data-box">
                      <div class="name">Initial Phase</div>
                      <div class="value">500</div>
                  </div>
      
              </div>
      '''
      
      soup = BeautifulSoup(html, features="html.parser")
      
      avail_phase = soup.find("div", text="Available Phase").find_next("div", class_="value").text
      initial_phase = soup.find("div", text="Initial Phase").find_next("div", class_="value").text
      
      print({"initial_phase": initial_phase, "available_phase": avail_phase})
      

      输出

      {'initial_phase': '500', 'available_phase': '250'}
      

      【讨论】:

      • 您的解决方案有效,我收到错误的问题是因为我没有登陆正确的页面,所以找不到这些值,这就是触发错误“'NoneType'对象”的原因谢谢你的帮助
      猜你喜欢
      • 2016-03-24
      • 1970-01-01
      • 1970-01-01
      • 2019-01-02
      • 2015-01-03
      • 1970-01-01
      • 1970-01-01
      • 2021-07-12
      • 1970-01-01
      相关资源
      最近更新 更多