【问题标题】:Beautifulsoup print attribute value for divs with same class具有相同类的 div 的 Beautifulsoup 打印属性值
【发布时间】:2018-11-21 15:58:50
【问题描述】:

我有以下代码可以在 value= 之后打印文本

soup = BeautifulSoup(html, 'lxml')

name = soup.find('input')['value']

print(name)

但是,该页面有多个具有相同类的 div,我尝试使用 findAll,但出现错误,只能打印第一个字段值,即名称。

请看附件截图

<div class="control-group"><label class="control-label required" for="client_appbundle_prospecttype_ProspectFirstContact_decision_timeframe">What date do you want to make a decision?</label>
  <div class="controls"><input type="text" id="client_appbundle_prospecttype_ProspectFirstContact_decision_timeframe" name="client_appbundle_prospecttype[ProspectFirstContact][decision_timeframe]" required="required" class="input-small text-bound datepicker hasDatepicker"></div>
</div>

</div>
</div>
</div>
</div>

<div class="tab-pane active" id="prospect_consultation">
  <div class="widget row-fluid">
    <div class="span12">
      <div class="navbar">
        <div class="navbar-inner">
          <h6>Personal details</h6>
        </div>
      </div>
      <div class="well">
        <div class="control-group">
          <label class="control-label">Name</label>
          <div class="controls">
            Sam Test-March 2018
          </div>
        </div>

        <div class="control-group">
          <label class="control-label">Address and postcode</label>
          <div class="controls">

          </div>
        </div>

        <div class="control-group">
          <label class="control-label">Mobile number</label>
          <div class="controls">
            12345678
          </div>
        </div>

        <div class="control-group">
          <label class="control-label">Email address</label>
          <div class="controls">
            test@test.com
          </div>
        </div>

谢谢!

【问题讨论】:

  • 请通过edit 使用sn-p 工具来包含HTML,而不是图像。此外,您显示的 HTML 没有可见的输入标记元素。
  • 我现在已经把代码上传到sn-p视图了。
  • 你想从那个 sn-p 中提取什么?
  • 嗨 QHarr,我正在尝试获取名称、地址和邮政编码、手机号码等字段中的值,该页面有许多带有不同标签的字段,所以我正在尝试使用 find_all产生错误,但是当我运行查找代码时,它只会打印第一个标签,即名称。

标签: python selenium web-scraping beautifulsoup


【解决方案1】:

可能是这样的:

from bs4 import BeautifulSoup
html = '''
<html>
 <head></head>
 <body>
  <div class="control-group">
   <label class="control-label required" for="client_appbundle_prospecttype_ProspectFirstContact_decision_timeframe">What date do you want to make a decision?</label>
   <div class="controls">
    <input type="text" id="client_appbundle_prospecttype_ProspectFirstContact_decision_timeframe" name="client_appbundle_prospecttype[ProspectFirstContact][decision_timeframe]" required class="input-small text-bound datepicker hasDatepicker">
   </div>
  </div>     
  <div class="tab-pane active" id="prospect_consultation"> 
   <div class="widget row-fluid"> 
    <div class="span12"> 
     <div class="navbar"> 
      <div class="navbar-inner"> 
       <h6>Personal details</h6> 
      </div> 
     </div> 
     <div class="well"> 
      <div class="control-group"> 
       <label class="control-label">Name</label> 
       <div class="controls">
         Sam Test-March 2018 
       </div> 
      </div> 
      <div class="control-group"> 
       <label class="control-label">Address and postcode</label> 
       <div class="controls"> 
       </div> 
      </div> 
      <div class="control-group"> 
       <label class="control-label">Mobile number</label> 
       <div class="controls">
         12345678 
       </div> 
      </div> 
      <div class="control-group"> 
       <label class="control-label">Email address</label> 
       <div class="controls">
         test@test.com 
       </div> 
      </div>
     </div>
    </div>
   </div>
  </div>
 </body>
</html>
'''
soup = BeautifulSoup(html, "lxml")

items = soup.select('.controls')
print([item.text.strip() for item in items if item.text.strip()])

【讨论】:

  • 谢谢!我可以指定特定的字段吗,比如只去掉“地址和邮政编码”和“姓名”等的值
  • 您为什么要这样做?如果 html 具有常量布局,您可以使用位置匹配来执行此操作,或者使用 xpath 来查找特定字符串。
猜你喜欢
  • 1970-01-01
  • 2022-08-19
  • 1970-01-01
  • 2019-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 1970-01-01
相关资源
最近更新 更多