无法有组织地获取输出

时间:2018-08-19 07:41:31

标签: python json python-3.x web-scraping

我已经用python编写了一个脚本,使用它们的api从网页上刮除与每个项目名称相关的namesreview texts以及一些项目reviewers。事情是我的下面的脚本可以部分地做那些事情。我需要有条理地做这些事情。

例如,在每个项目name中,有多个review textsreviewer names连接到它。我希望让他们进入以下栏目:

Name review text reviewer review text reviewer -----

基本上,我不知道如何在脚本中以正确的方式利用已经定义的for loop。最后,很少有没有任何namesreviews的项目reviewers,所以当找不到任何reviews时代码就会中断,等等。

到目前为止,这是我的方法:

import requests

url = "https://eatstreet.com/api/v2/restaurants/{}?yelp_site="

res = requests.get("https://eatstreet.com/api/v2/locales/madison-wi/restaurants")
for item in res.json():
    itemid = item['id']
    req = requests.get(url.format(itemid))
    name = req.json()['name']
    for texualreviews in req.json()['yelpReviews']:
        reviews = texualreviews['message']
        reviewer = texualreviews['reviewerName']
        print(f'{name}\n{reviews}\n{reviewer}\n')

如果我在for循环外使用print语句,它只会给我一个reviewreviewer

任何修复问题的帮助将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

您需要将评论和评论者名称附加到数组中以根据需要显示。

尝试以下代码。

review_data = dict()
review_data['name'] = req.json()['name']
review_data['reviews'] = []
for texualreviews in req.json()['yelpReviews']:
    review_sub_data = {'review': texualreviews['message'], 'reviewer': texualreviews['reviewerName']}
    review_data['reviews'].append(review_sub_data)
#O/P {'name': 'xxx', 'reviews':[{'review':'xxx', 'reviewer': 'xxx'}, {'review':'xxx', 'reviewer': 'xxx'}]}

希望这会有所帮助!