python - 如何将输出保存在嵌套字典中?
问题描述
我必须为我的作业编写一个简短的 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' }
解决方案
好吧,基本上你做了困难的部分,找到正确的节点和值,加上逻辑。与此相比,添加到对象列表的部分非常简单。
这是一个我认为应该可以工作的示例,我只是更改了相应 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)
顺便说一句,结果应该是您提到的列表,每行一个对象。
推荐阅读
- r - 使用 R 中的 data.table 将空数据帧写入磁盘中的 CSV
- javascript - 如何防止jquery加载已经存在的脚本
- angular - ng2 图表中的散点图
- php - 请求的未知数据库类型枚举,Doctrine\DBAL\Platforms\MySQL57Platform 可能不支持它。Symfony 4
- python - sklearn 错误 - 我已经填写了列的缺失值,但仍然面临以下错误
- javascript - 多维数组 - 递归 / Javascript 简介
- java - Spring 无法获取 JDBC 连接
- python - 使用 pandas 我们如何制作不同的文本组(来自 PDF 输出)并给他们特定的组 ID?
- meteor - 如何为我的应用程序目录提供正确的权限以运行 docker-compose up?
- cytoscape.js - 在 cytoscape 鼠标悬停时显示和隐藏节点信息