首页 > 解决方案 > 如何将输出保存在嵌套字典中?

问题描述

我必须为我的作业编写一个简短的 python 网络抓取脚本。我成功地打印了这些项目,但我无法以所需的格式保存我的输出。

这是 HTML 片段。完整链接在这里

<td style="width:11%; vertical-align:top;">
<p><b>M5A</b><br/>
<span style="font-size:80%;">
<a href="/wiki/Downtown_Toronto" title="Downtown Toronto">Downtown Toronto</a>
<br/>
(<a href="/wiki/Regent_Park" title="Regent Park">Regent Park</a> / 
<a class="mw-redirect" href="/wiki/Harbourfront,_Toronto" title="Harbourfront, Toronto">Harbourfront</a>)
</span>
</p>
</td>

这是我的脚本

for i, element in enumerate(table_lines):
    lst =[]
    span = table_lines[i].find('span')
    if span.text != 'Not assigned':
        print(element.find('b').text)
        neighborhoods = element.findAll('a')
        for i, link in enumerate(neighborhoods):
            if i == 0:
                print("city:",link.text)
            else:
                print("areas", link.text)
        print('----------------')

我想要的输出格式

{'postcode': 'M5A', 'city': 'Downtown Toronto', 'areas': 'Regent Park, Harbourfront' }

标签: pythonpython-3.x

解决方案


好吧,基本上你做了困难的部分,找到正确的节点和值,加上逻辑。与此相比,添加到对象列表的部分非常简单。

这是一个我认为应该可以工作的示例,我只是更改了相应 var assign 的打印,然后创建对象并将其推送到最终列表。

lst =[]
for i, element in enumerate(table_lines):
    span = table_lines[i].find('span')
    if span.text != 'Not assigned':
        postcode = element.find('b').text
        neighborhoods = element.findAll('a')
        areas = []
        for i, link in enumerate(neighborhoods):
            if i == 0:
                city = link.test
            else:
                areas.append(link.test)
        lst.append({
            'postcode': postcode,
            'city': city,
            'areas': ','.join(areas)
        })
print(lst)

顺便说一句,结果应该是您提到的列表,每行一个对象。


推荐阅读