今天写了个爬虫,在抓取数据的时候遇到一个问题,我觉得如果不注意,这个问题很容易被忽略,所以特意在博客记录下:
问题描述:
比如,我在提取信息时,这样判断类型:
1
|
type (answers[ 0 ].find_all( "table" )[ 0 ].string) |
得到的结果为:
NoneType
所以,我就想,条件过滤的时候用is not 或者 != 就可以过滤了,比如这样尝试的时候:
1
|
type (answers[ 0 ].find_all( "table" )[ 0 ].string) is '''NoneType''' |
结果我得到的是:
False
接下来,我用==来判断也是False,我就猜想,难到不能用type()来判断?
经过查找,发现Nonetype类型,其实就是值为None,所以直接判断值就可以了,比如这样:
1
|
answers[ 0 ].find_all( "table" )[ 0 ].string is None |
得到的结果:
True
ok,到这里,问题就解决了,列表推导式直接得到结果:
1
|
answer_table = [x.find_all( "table" )[ 0 ].string.strip() for x in answers if x.find_all( "table" )[ 0 ].string is not None ] |
answer_table 结果:
['水箱内部有没有通过,没有的话就是水箱堵了。', '我的小松也一样', '电控系统出现故障,电脑板传出的信号与实际动力不同,大泵与发动机动力不匹配发动机负荷重所以高温,动作慢', '换个新水箱,多页风扇', '这就是把水箱盖打开了,水流出来了,加点油门下水管就吸遍了。', '水箱堵了,拿下去专业悍水箱那输通,就ok', '如果缸垫没冲,就换水箱,我也准备换水箱。']
补充:Python对<type 'NoneType'>数据类型的处理
Python对象的概念
Python中,万物皆对象,所有的操作都是针对对象的,那什么是对象,5是一个int对象,‘oblong'是一个str对象,异常也是一个对象,抽象一点是,人,猫,狗也是一个对象
那对于一个对象,它就有包括两方面的特征:
属性:去描述它的特征
方法: 它所具有的行为
所以,对象=属性+方法 (其实方法也是一种属性,一种区别于数据属性的可调用属性)
把具有相同属性和方法的对象就可以归为一类,即Classl。类就好比是一张蓝图,使用一个类可以创建多个对象实例 ,即人,猫,狗都属于哺乳动物类
类是对象的抽象化,对象是类的实例化。
类不代表具体的事物,而对象表示具体的事物
类也是有属性和方法的。
数据类型也是对象
实际上Pyhton在面向对象程序设计时,才会有对象这个概念,而在面向过程型程序设计时,我们讨论最多的就是数据类型。
Python提供的基本数据类型主要有:布尔类型、整型、浮点型、字符串、列表、元组、集合、字典等… …
数据类型也可以看做是一个”类“
每一种数据类型都是一个对象,也具有其自己的属性和方法
Python中的None与 NULL(即空字符)的区别
None是Python的特殊类型,NoneType对象,它只有一个值None.
它不支持任何运算也没有任何内建方法。
None和任何其他的数据类型比较永远返回False。
None有自己的数据类型NoneType。
你可以将None复制给任何变量,但是你不能创建其他NoneType对象。
是不同的一种数据类型:
1
2
|
>>> type ( None ) < class 'NoneType' > |
表示该值是一个空对象,空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。
1
2
|
>>> type ('') < class ' 'str' > |
你可以将None赋值给任何变量,也可以将任何变量赋值给一个None值的对象
判断的时候 均是False
1
2
3
|
>>> ff = None >>> if ff: print ( 'ff is define' ) |
执行结果:无打印!
属性不同
使用dir()函数返回参数的属性、方法列表。如果参数包含方法dir(),该方法将被调用。如果参数不包含dir(),该方法将最大限度地收集参数信息。
1
2
|
dir ( None ) [ '__bool__' , '__class__' , '__delattr__' , '__dir__' , '__doc__' , '__eq__' , '__format__' , '__ge__' , '__getattribute__' , '__gt__' , '__hash__' , '__init__' , '__le__' , '__lt__' , '__ne__' , '__new__' , '__reduce__' , '__reduce_ex__' , '__repr__' , '__setattr__' , '__sizeof__' , '__str__' , '__subclasshook__' ] |
1
2
|
dir ('') [ '__add__' , '__class__' , '__contains__' , '__delattr__' , '__dir__' , '__doc__' , '__eq__' , '__format__' , '__ge__' , '__getattribute__' , '__getitem__' , '__getnewargs__' , '__gt__' , '__hash__' , '__init__' , '__iter__' , '__le__' , '__len__' , '__lt__' , '__mod__' , '__mul__' , '__ne__' , '__new__' , '__reduce__' , '__reduce_ex__' , '__repr__' , '__rmod__' , '__rmul__' , '__setattr__' , '__sizeof__' , '__str__' , '__subclasshook__' , 'capitalize' , 'casefold' , 'center' , 'count' , 'encode' , 'endswith' , 'expandtabs' , 'find' , 'format' , 'format_map' , 'index' , 'isalnum' , 'isalpha' , 'isdecimal' , 'isdigit' , 'isidentifier' , 'islower' , 'isnumeric' , 'isprintable' , 'isspace' , 'istitle' , 'isupper' , 'join' , 'ljust' , 'lower' , 'lstrip' , 'maketrans' , 'partition' , 'replace' , 'rfind' , 'rindex' , 'rjust' , 'rpartition' , 'rsplit' , 'rstrip' , 'split' , 'splitlines' , 'startswith' , 'strip' , 'swapcase' , 'title' , 'translate' , 'upper' , 'zfill' ] |
python 中is和= = 的区别
Python中的对象包含三要素:id、type、value,其中id用来唯一标识一个对象,type标识对象的类型,value是对象的值。
is判断的是a对象是否就是b对象,是通过id来判断的;
==判断的是a对象的值是否和b对象的值相等,是通过value来判断的。
python中的not代表什么
在python中not是逻辑判断词,用于布尔型True和False,not True为False,not False为True.
pythond对变量是否为None的判断
python对变量是否为None的判断,有三种主要的写法:
第一种是if x is None;
第二种是 if not x:;
第三种是if not x is None(这句这样理解更清晰if not (x is None)) 。
在Python中 None, False, 空字符串”“, 0, 空列表[], 空字典{}, 空元组()都相当于False 。
1
|
<strong> not None = = not False = = not '' = = not 0 = = not [] = = not {} = = not ()< / strong> |
foo is None 和 foo == None的区别
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
>>> class foo( object ): def __eq__( self , other): return True >>> f = foo() >>> f = = None True >>> f is None False >>> list1 = [ 1 , 2 , 3 ] >>> list2 = [ 1 , 2 , 3 ] >>> list1 = = list2 True >>> list1 is list2 False |
另外:
1
|
(ob1 is ob2) 等价于 ( id (ob1) = = id (ob2)) |
以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://soyoger.blog.csdn.net/article/details/81185217