xue11 发表于 2018-11-15 23:34:03

求助关于AttributeError: 'NoneType' object has no attribute 'string 报错原因

本帖最后由 xue11 于 2018-11-15 23:35 编辑

一、代码部分:
    soup = BeautifulSoup(html_doc,'html.parser')
    tag = soup.find_all('div',class_="mohe-tips")
    print(tag)
   


   
    for each in tag:
      tag_number = each.b.string
      print(tag_number)


#运行结果
[<div class="mohe-tips">
<strong class="mohe-tips mh-hy">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHAAAAARBAMAAAD3ZjWHAAAAG1BMVEX///9mZmafn5+ysrLY2Njr6+uMjIx5eXnFxcUxqC9mAAABbElEQVQokcWSz0/CMBTHv/vdoxOmHAeIXocmyLGLibuOkLBrVVSOU2fkODAKf7bt+sYg3rVJ99r33ue99dsC/zLMSH0LJHq1JndfTufdye0BMLd9OVoYI0tNXoN2cABmFIhTwBIsd545hiXQUz6+wSbV8TtVyw8J7Pp661bm2CvNEGYJK9SgFfUxp373ZHcdJ6qiG1ZOg+qoda/enh6A86VIPn+B9c5PjVR1hBvtpNGgExTLJDYjVtXsNOC17qzB7t4PEGiJYJR464jlqseiAV9k4lEFdqU1BeyCIm8a/ApmCbvcgR79EmuFKps64lzO1UCHOpSRV+LUoFFqtxcVWKUwphU4Gyqpv8vmEuUrCA/AOK2PmG3b8oyjChwj1g9DySRIPd6AzhJP2mu3wXzZYCJIVanIQodWXFuZWYNT/5G1tTeLbj62rxwzOuOtgEMhepmOwP4DYCTqlfvAYV9wTNQ1nLhnGPrNTf7p+AG9QEeghB1nDAAAAABJRU5ErkJggg=="/>
</strong>
</div>, <div class="mohe-tips mh-ws-hy">
<span class="mohe-ph-mark" style="background-color:#">
                                        保险理财
                                </span>
<span style="color:#cc0000;">
                                        此号码近期被<b>26570</b>位<a class="mohe-sjws" href=" http://shouji.360.cn/" target="_blank">360手机卫士</a>用户标记,疑似为保险理财电话!
                                </span>
</div>]
Traceback (most recent call last):
File "C:\Users\songyuxue\Desktop\mark\mark_number.py", line 39, in <module>
    tag_number = each.b.string
AttributeError: 'NoneType' object has no attribute 'string'


问题:利用soup.find_all('div',class_="mohe-tips"),获取已解析的html,尝试获取b标签的值26570 发现会报错,这里用string获取文本没有错啊~ 为什么会报出AttributeError: 'NoneType' object has no attribute 'string” 错误啊?求解这个报错是什么意思,如何修改。


二、代码部分
    soup = BeautifulSoup(html_doc,'html.parser')
    tag = soup.find_all('div',class_="mohe-tips")
    print(tag)
   


   
    for each in tag:
      tag_number = each.b.string
      print(tag_number)

#运行结果
[<div class="mohe-tips">
<span class="mohe-ph-mark" style="background-color:#">
                                                                                疑似欺诈!谨防上当受骗!
                                                                        </span>
<span style="color:#cc0000;">
                                                                                此号码近期被<b>174</b>位<a class="mohe-sjws" href=" http://shouji.360.cn/" target="_blank">360手机卫士</a>用户标记,疑似为疑似欺诈电话!
                                                                        </span>
</div>]
174

问题2:为什么同样的代码上面个报错,而下面个代码并没有报错?

塔利班 发表于 2018-11-15 23:34:04

你没看到你第一个列表2个元素,第一个元素没有b么,第二个就一个元素

wongyusing 发表于 2018-11-15 23:48:02

应该是类型问题。
你分别在两个代码的
print(tag)
#改成下面的
print(type(tag))
看一下输出

考拉熊 发表于 2018-11-16 09:20:17

过来顶一下

xue11 发表于 2018-11-16 13:21:09

塔利班 发表于 2018-11-16 08:27
你没看到你第一个列表2个元素,第一个元素没有b么,第二个就一个元素

看见了~
但是共同之处就只有一个b标签。
想问下报错的那个想提取b标签的值,有什么办法么

塔利班 发表于 2018-11-16 14:07:02

xue11 发表于 2018-11-16 13:21
看见了~
但是共同之处就只有一个b标签。
想问下报错的那个想提取b标签的值,有什么办法么

那就每个判断下有没有b标签或者用try except

xue11 发表于 2018-11-16 23:22:19

wongyusing 发表于 2018-11-15 23:48
应该是类型问题。
你分别在两个代码的



改为print(type(tag))
输出结果均为 <class 'bs4.element.ResultSet'>

wongyusing 发表于 2018-11-16 23:36:38

为什么不用lxml进行解析呢??
soup = BeautifulSoup(html_doc,'lxml')
    tag = soup.select('mh-ws-hy')
    print(tag.text())

xue11 发表于 2018-11-17 00:10:14

塔利班 发表于 2018-11-16 14:07
那就每个判断下有没有b标签或者用try except

用try except 代码运行太慢。
若判断该如何写呢

塔利班 发表于 2018-11-17 08:18:42

xue11 发表于 2018-11-17 00:10
用try except 代码运行太慢。
若判断该如何写呢

运行还慢?你不是已经提取了soup了么,要不你存储的时候就放带b的标签
页: [1]
查看完整版本: 求助关于AttributeError: 'NoneType' object has no attribute 'string 报错原因