【问题标题】:Looping over JSON data in Python multiple times在 Python 中多次循环遍历 JSON 数据
【发布时间】:2020-04-14 05:31:02
【问题描述】:

我正在尝试遍历 JSON 数据并获取 五个 id,因为一页上总是有五个。现在我只能得到最后一个。我怎样才能获得五个ID? 这是我的代码:

import requests
from bs4 import BeautifulSoup
import re
import json

source = requests.get('https://www.tripadvisor.ch/Hotel_Review-g188113-d228146-Reviews-Coronado_Hotel-Zurich.html#REVIEWS').text

soup = BeautifulSoup(source, 'lxml')

pattern = re.compile(r'window.__WEB_CONTEXT__={pageManifest:(\{.*\})};')
script = soup.find("script", text=pattern)
dictData = pattern.search(script.text).group(1)
jsonData = json.loads(dictData)


def get_ids():

    id_dict = {}
    for locations in jsonData['urqlCache']['669061039']['data']['locations']:
        reviews = locations['reviewListPage']['reviews']
        for data in reviews:
            id_dict["id"] = data['id']

    return id_dict

def main():

    id = get_ids()
    print(id)

if __name__ == "__main__":
    main()


输出应如下所示:

{'id': 732967109}
{'id': 726974284}
{'id': 725596487}
{'id': 725202773}
{'id': 720102359}

感谢您的所有建议!

【问题讨论】:

  • id_dict["id"] = data['id'] 这只是在每次循环中覆盖id_dict['id'] 的值。也许你的意思是id_dict[data['id']] = data?或者也许你想要一个列表,而不是一个字典。我不知道。在调试 Python 代码时,首先使用最少的代码来试验问题的较小部分。据我所知,您的问题与 BeautifulSoup 或 JSON 等更复杂的事情无关。
  • 感谢您的评论!我想要五个不同的字典或一个包含五个字典的列表。

标签: python json dictionary for-loop beautifulsoup


【解决方案1】:

您每次都在覆盖键,您需要唯一的键。

尝试类似:

count = 0
for data in reviews:
    id_dict[count] = data['id']
    count += 1

【讨论】:

    【解决方案2】:

    试试这个将 id 添加到列表中

    id_dict["id"] = []
    for data in reviews:
        id_dict["id"].append(data['id'])
    

    【讨论】:

    • 你正在分配文字列表,你不能在这里这样做。
    猜你喜欢
    • 1970-01-01
    • 2019-12-18
    • 1970-01-01
    • 2018-06-19
    • 2023-01-20
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多