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