BeautifulSoup:AttributeError:“NoneType”对象没有属性“文本”

Posted

技术标签:

【中文标题】BeautifulSoup:AttributeError:“NoneType”对象没有属性“文本”【英文标题】:BeautifulSoup: AttributeError: 'NoneType' object has no attribute 'text' 【发布时间】:2021-12-19 06:03:54 【问题描述】:

使用 beautifulSoup 抓取网页时出现 'NoneType' object has no attribute 'text' 错误。

html文档部分如下所示:

<div class="ntb boy">
 <ol>...</ol>
 <ul class="nbd">
  <li class="ntr" data-id="bwjleo">
   <i class="nvt">...</i>
   <dl class="nem">
    <dt class="nvar">
     <b>
      <a href="https://www.babynamesdirect.com/boy/aak" title="Meaning and more details of Aak">
       Aak
      </a>
     </b>
    </dt>
    <dd class="ndfn">
     A Nature; Sky
    </dd>
   </dl>
   <em class="narr">
   </em>
  </li>
  <li>...</li>
  <li>...</li>
       .
       .
 </ul>
</div>

用于提取名称的代码(上述html中的“Aak”):

res = requests.get('https://www.babynamesdirect.com/baby-names/indian/boy/trending')
soup = BeautifulSoup(res.text, 'html5lib')
ul  = soup.find('div', class_ = 'ntb boy').find_all('li')
names = [name.dt.text for name in ul]
print(names)

当我尝试打印name.dt 时,我得到bs4.element.Tag。但是name.dt.text 给AttributeError: 'NoneType' object has no attribute 'text'

【问题讨论】:

【参考方案1】:

如果您尝试直接抓取,则会出现某些 None 值。

例如:名称 Naksh 后有一个空字段,会出错。

你可以试试这个来解决你的错误。

res = requests.get('https://www.babynamesdirect.com/baby-names/indian/boy/trending')
soup = BeautifulSoup(res.text, 'html5lib')
ul  = soup.find('div', class_ = ['ntb','boy']).find_all('li')
for name in ul:
    try:
        print(name.dt.a.text)
    except:
        pass

【讨论】:

以上是关于BeautifulSoup:AttributeError:“NoneType”对象没有属性“文本”的主要内容,如果未能解决你的问题,请参考以下文章

爬虫—— BeautifulSoup模块获取元素

python beautifulsoup应用问题?

BeautifulSoup

模块“xlwings”没有属性“书”

BeautifulSoup库的使用

Python BeautifulSoup库使用