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”对象没有属性“文本”的主要内容,如果未能解决你的问题,请参考以下文章