猿问

__dict __。items()不返回所有对象属性

考虑:


>>> result = requests.get('http://dotancohen.com')

>>> soup = BeautifulSoup(result.text)

>>> a = soup.find('a')

>>> for k,v in a.__dict__.items():

...     print(str(k)+": "+str(v))

... 

can_be_empty_element: False

previous_element: <h1><a class="title" href="/">Dotan Cohen</a></h1>

next_sibling: None

name: a

parent: <h1><a class="title" href="/">Dotan Cohen</a></h1>

namespace: None

prefix: None

previous_sibling: None

attrs: {'href': '/', 'class': ['title']}

next_element: Dotan Cohen

parser_class: <class 'bs4.BeautifulSoup'>

hidden: False

contents: ['Dotan Cohen']

>>> pprint(a)

<a class="title" href="/">Dotan Cohen</a>

>>>

该值pprint的回报是不是任何的价值属性是__dict__.items()回报。对我来说,这意味着其中的某些属性a未在中返回__dict__.items()。我将如何访问这些属性?


慕侠2389804
浏览 303回答 1
1回答

守着星空守着你

实例字典中没有缺少属性。让我们看一下元素的表示形式:<a&nbsp;class="title"&nbsp;href="/">Dotan&nbsp;Cohen</a>我们有一个标记名(a),属性(title和href,以及值),还有文本内容(Dotan Cohen)。这些都出现在实例属性您列出:name: aattrs: {'href': '/', 'class': ['title']}contents: ['Dotan Cohen']contents是此元素的直接后代的列表;只有一个文本对象(NavigableString实例使用与常规字符串类似的表示形式)。您可以使用vars()内置的API函数列出实例属性。我知道您pprint()已经在使用;而不是循环播放.items(),只需使用pprint(vars(a))并保存您自己输入的完整循环即可;作为奖励pprint(),首先对键进行排序:>>> pprint(vars(a)){'attrs': {'class': ['title'], 'href': '/'},&nbsp;'can_be_empty_element': False,&nbsp;'contents': [u'Dotan Cohen'],&nbsp;'hidden': False,&nbsp;'name': 'a',&nbsp;'namespace': None,&nbsp;'next_element': u'Dotan Cohen',&nbsp;'next_sibling': None,&nbsp;'parent': <h1><a class="title" href="/">Dotan Cohen</a></h1>,&nbsp;'parser_class': <class 'bs4.BeautifulSoup'>,&nbsp;'prefix': None,&nbsp;'previous_element': <h1><a class="title" href="/">Dotan Cohen</a></h1>,&nbsp;'previous_sibling': None}您正在查看的字符串是由.__repr__()元素类的钩子构建的:>>> a.__repr__()'<a class="title" href="/">Dotan Cohen</a>'通常repr()在对象上使用时调用:>>> repr(a)'<a class="title" href="/">Dotan Cohen</a>'该字符串由您在对象属性中看到的已解析元素信息构建而成。
随时随地看视频慕课网APP

相关分类

Python
我要回答