<p>首先,我需要重申你的问题。该示例显示了一个<code>div</code>标记,其中包含一个<code>A</code>标记。<code>A</code>标记有一个ID,您想用它作为查找下表的键。<code>div</code>标记后面跟着一个<code>table</code>。表的每一行都包含一个与前面<code>A</code>中标识的对象相关联的名称-值对。你知道吗</p>
<p>您有一个充满了多个<code>div</code>标记的页面,我的上一段描述了每个标记。你知道吗</p>
<p>您想生成一些数据结构来方便地访问表数据并将其与命名对象相关联吗?你知道吗</p>
<p>我有这个权利吗?你知道吗</p>
<p>答案,正如你所预言的,是使用美丽之声。我们将创建一个由<code>id</code>属性键控的字典。字典中的每个值本身就是一个字典,由表中的“属性名”键入。你知道吗</p>
<pre><code>from bs4 import BeautifulSoup
from pprint import pprint
result = {}
soup = BeautifulSoup(page)
divs = soup.find_all("div", {"class":"info"})
for div in divs:
name = div.find("a")["id"]
table = div.find_next("table", {"class":"properties"})
rows = table.find_all("tr", {"class":None})
rowd = {}
for row in rows:
cells = row.find_all("td")
rowd[cells[0].text] = cells[1].text
result[name] = rowd
pprint (result)
</code></pre>
<p>或者,如果你喜欢听写理解(就像我一样):</p>
<pre><code>result = {
div.find("a")["id"]: {
cells[0].text : cells[1].text
for row in table.find_all("tr", {"class":None})
for cells in [row.find_all("td")]
}
for div in soup.find_all("div", {"class":"info"})
for table in [div.find_next("table", {"class":"properties"})]
}
pprint(result)
</code></pre>
<p>当指向您的示例数据时,这将产生:</p>
<pre><code>{'bc968f9fa2db71455f50e0c13ce50e871fS7f0e': {u'AppServer': u'WebLogic 10',
u'SSL_Port': u'28443',
u'configureBPMUIStaticContent': u'true',
u'context': u'workspace',
u'instance_home': u'/essdev1/app/oracle/Middleware/user_projects/epmsystem1',
u'isCompact': u'false',
u'maintVersion': u'11.1.2.2.0.66',
u'port': u'28080',
u'serverName': u'FoundationServices0',
u'validationContext': u'workspace/status',
u'version': u'11.1.2.0'}}
</code></pre>
<p>要使用数据结构,只需遵循字典。例如:</p>
<pre><code>print result["bc968f9fa2db71455f50e0c13ce50e871fS7f0e"]["serverName"]
</code></pre>