鱼C论坛

 找回密码
 立即注册
查看: 10535|回复: 9

[已解决]求助关于AttributeError: 'NoneType' object has no attribute 'string 报错原因

[复制链接]
发表于 2018-11-15 23:34:03 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 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么,第二个就一个元素

最佳答案

查看完整内容

你没看到你第一个列表2个元素,第一个元素没有b么,第二个就一个元素
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-15 23:34:04 | 显示全部楼层    本楼为最佳答案   
你没看到你第一个列表2个元素,第一个元素没有b么,第二个就一个元素
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-15 23:48:02 | 显示全部楼层
应该是类型问题。
你分别在两个代码的
  1. print(tag)
  2. #  改成下面的
  3. print(type(tag))
复制代码

看一下输出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-16 09:20:17 | 显示全部楼层
过来顶一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-11-16 13:21:09 From FishC Mobile | 显示全部楼层
塔利班 发表于 2018-11-16 08:27
你没看到你第一个列表2个元素,第一个元素没有b么,第二个就一个元素

看见了~
但是共同之处就只有一个b标签。
想问下报错的那个想提取b标签的值,有什么办法么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

那就每个判断下有没有b标签或者用try except
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-11-16 23:22:19 | 显示全部楼层
wongyusing 发表于 2018-11-15 23:48
应该是类型问题。
你分别在两个代码的

改为  print(type(tag))
输出结果均为 <class 'bs4.element.ResultSet'>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-16 23:36:38 | 显示全部楼层
为什么不用lxml进行解析呢??
  1. soup = BeautifulSoup(html_doc,'lxml')
  2.     tag = soup.select('mh-ws-hy')[0]
  3.     print(tag.text())
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-11-17 00:10:14 | 显示全部楼层
塔利班 发表于 2018-11-16 14:07
那就每个判断下有没有b标签或者用try except

用try except 代码运行太慢。
若判断该如何写呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-17 08:18:42 | 显示全部楼层
xue11 发表于 2018-11-17 00:10
用try except 代码运行太慢。
若判断该如何写呢

运行还慢?你不是已经提取了soup了么,要不你存储的时候就放带b的标签
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-26 09:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表