【问题】
python中使用BeautifulSoup,已经导入某些类型:
from BeautifulSoup import BeautifulSoup,Tag,CData;
程序中,已经从某soup去find得到的变量,其contents列表中的包含很多值,通过type得知是:
type(singleContent)= <class ‘BeautifulSoup.NavigableString’>
或
type(singleContent)= <type ‘instance’>
现在的问题是,想要去判断对应的singleContent是否是该BeautifulSoup类型的instance,但是不值得如何判断。
【解决过程】
1.试了很多种方式:
if(isinstance(singleContent, BeautifulSoup)):
if(isinstance(singleContent, instance)):
结果都会出错。
2.后来参考:Type Checking in Python写了:
print "singleContent.__class__=",singleContent.__class__;
的确可以得知此变量的类型了:
singleContent.__class__= BeautifulSoup.Tag
但是想要通过下面代码判断该变量是否是BeautifulSoup.Tag:
if(BeautifulSoup.Tag == singleContent.__class__):
却会出错。
也试了:
if(isinstance(singleContent, BeautifulSoup.Tag)):
其也会出错。
搞得不值得如何才能判断该变量是否是(已经知道的类型:)BeautifulSoup.Tag了。
3.后来经过尝试才发现,原来这样写:
if(isinstance(singleContent, Tag)):
是可以的。算是终于可以正确判断该变量是否是对应的类型了。
此处,推断是,由于前面是from BeautifulSoup去导入BeautifulSoup,Tag,CData的,所以此处不能写BeautifulSoup.Tag而只能写Tag。但是也还是觉得有点怪异。
【后记】
虽然解决了上述问题。
但是后来遇到其他一个问题。
那就是,对于已知BeautifulSoup.Tag类型的变量singleContent:
<p class="cc-lisence" style="line-height:180%;"> <a href="http://creativecommons.org/licenses/by/3.0/deed.zh" target="_blank">版权声明</a> :转载时请以超链接形式标明文章原始出处和作者信息及 <a href="http://bangzhuzhongxin.blogbus.com/logs/11205960.html" target="_blank">本声明</a> <br /> <a href="http://littlebasin.blogbus.com/logs/1379808.html">http://littlebasin.blogbus.com/logs/1379808.html</a> <br /> <br /> </p>
想要判断去查找其所含的class:
singleContent.find(attrs={"class":"cc-lisence"})
是找不到的。
同理,通过:
print "singleContent.p=",singleContent.p; print "singleContent.p['class']=",singleContent.p['class'];
都是无法获得对应的值的。
因为此处.p指的是对其下,去找是否包含p的标签,此处很明显,只有3个a标签和3个br标签,没有p标签。
其主标签p,暂时也不知道如何获得。
最后尝试了半天,只有这样才可以:
print "singleContent['class']=",singleContent['class'];
获得对应的class的值cc-lisence。
由此,才能实现去判断singleContent中,是否包含值为cc-lisence的class。
转载请注明:在路上 » 【已解决】如果获得一个变量的类型,并且判断该变量是否属于某类型