Python Dict索引';s在BeautifulSoup和;如果Dict中的x“;
我不知道如何检查数组索引是否存在Python Dict索引';s在BeautifulSoup和;如果Dict中的x“;,python,dictionary,beautifulsoup,Python,Dictionary,Beautifulsoup,我不知道如何检查数组索引是否存在 for tag in soup.findAll("input"): print tag['type'] if 'type' in tag: print "b" 产出: 2255 text hidden text text text Traceback (most recent call last): File "/home//workspace//src/x.py", line
for tag in soup.findAll("input"):
print tag['type']
if 'type' in tag:
print "b"
产出:
2255
text
hidden
text
text
text
Traceback (most recent call last):
File "/home//workspace//src/x.py", line 268, in <module>
print tag['type']
File "/home//workspace//src/BeautifulSoup.py", line 601, in __getitem__
return self._getAttrMap()[key]
KeyError: 'type'
2255
文本
隐藏的
文本
文本
文本
回溯(最近一次呼叫最后一次):
文件“/home//workspace//src/x.py”,第268行,在
打印标签['type']
文件“/home//workspace//src/BeautifulSoup.py”,第601行,在__
返回self.\u getAttrMap()[key]
KeyError:“类型”
为什么它从来没有输出过“b”?一个漂亮的标签组
不是一个dict
。有时,它在某些方面的行为类似于一个属性([]
您发现的表示法获取属性的值),但在其他方面则不然<标记上的
中的code>将检查标记是否是该标记的直接子级;它不检查属性
相反,您可以这样做:
if not tag.get('type', None):
pass # type is empty or nonexistent
漂亮的组标记
不是命令
。有时,它在某些方面的行为类似于一个属性([]
您发现的表示法获取属性的值),但在其他方面则不然<标记上的
中的code>将检查标记是否是该标记的直接子级;它不检查属性
相反,您可以这样做:
if not tag.get('type', None):
pass # type is empty or nonexistent
为什么它从来没有输出过“b”
您假设findAll返回的标记是dicts,而实际上不是。您正在使用的BeautifulSoup库有自己的自定义类,在本例中是BeautifulSoup.Tag,它的工作原理可能与dict非常相似,但实际上并非如此
在这里,请查看以下内容:
>>> doc = ['<html><head><title>Page title</title></head>',
... '<body><p id="firstpara" align="center">This is paragraph <b>one</b>.',
... '<p id="secondpara" align="blah">This is paragraph <b>two</b>.',
... '</html>']
>>> soup = BeautifulSoup(''.join(doc))
>>> tag = soup.findAll("p")[0]
>>> type(tag)
class 'BeautifulSoup.Tag'>
>>> isinstance(tag, dict)
False
>>>doc=[“页面标题”,
这是第一段,
这是第二段,
... '']
>>>汤=美丽的汤(''.join(doc))
>>>tag=soup.findAll(“p”)[0]
>>>类型(标签)
类“BeautifulSoup.Tag”>
>>>isinstance(标记、命令)
假的
因为它实际上不是一个dict,所以您得到了一些不同的(特定于域的)行为,在本例中是一个直系子项列表(您正在“索引”的标记中立即包含的标记)
看起来您想知道输入标记是否具有属性类型,因此根据BeautifulSoup文档,您可以使用tag.attrs和attrMap列出标记的属性
>>> tag.attrs
[(u'id', u'firstpara'), (u'align', u'center')]
>>> tag.attrMap
{u'align': u'center', u'id': u'firstpara'}
>>> 'id' in tag.attrMap
True
>>>tag.attrs
[(u'id',u'firstpara'),(u'align',u'center')]
>>>tag.attrMap
{u'align':u'center',u'id':u'firstpara'}
>>>tag.attrMap中的“id”
真的
BeautifulSoup是一个非常有用的库,但是你必须对它稍加利用才能得到你想要的结果。确保花时间在交互式控制台上玩这些类,并记住使用help(someobject)语法查看您正在玩什么以及它有哪些方法
为什么它从来没有输出过“b”
您假设findAll返回的标记是dicts,而实际上不是。您正在使用的BeautifulSoup库有自己的自定义类,在本例中是BeautifulSoup.Tag,它的工作原理可能与dict非常相似,但实际上并非如此
在这里,请查看以下内容:
>>> doc = ['<html><head><title>Page title</title></head>',
... '<body><p id="firstpara" align="center">This is paragraph <b>one</b>.',
... '<p id="secondpara" align="blah">This is paragraph <b>two</b>.',
... '</html>']
>>> soup = BeautifulSoup(''.join(doc))
>>> tag = soup.findAll("p")[0]
>>> type(tag)
class 'BeautifulSoup.Tag'>
>>> isinstance(tag, dict)
False
>>>doc=[“页面标题”,
这是第一段,
这是第二段,
... '']
>>>汤=美丽的汤(''.join(doc))
>>>tag=soup.findAll(“p”)[0]
>>>类型(标签)
类“BeautifulSoup.Tag”>
>>>isinstance(标记、命令)
假的
因为它实际上不是一个dict,所以您得到了一些不同的(特定于域的)行为,在本例中是一个直系子项列表(您正在“索引”的标记中立即包含的标记)
看起来您想知道输入标记是否具有属性类型,因此根据BeautifulSoup文档,您可以使用tag.attrs和attrMap列出标记的属性
>>> tag.attrs
[(u'id', u'firstpara'), (u'align', u'center')]
>>> tag.attrMap
{u'align': u'center', u'id': u'firstpara'}
>>> 'id' in tag.attrMap
True
>>>tag.attrs
[(u'id',u'firstpara'),(u'align',u'center')]
>>>tag.attrMap
{u'align':u'center',u'id':u'firstpara'}
>>>tag.attrMap中的“id”
真的
BeautifulSoup是一个非常有用的库,但是你必须对它稍加利用才能得到你想要的结果。确保花时间在交互式控制台上玩这些类,并记住使用help(someobject)语法查看您正在玩什么以及它有哪些方法