【发布时间】: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