【问题标题】:Unable to get the output in an organized manner无法以有组织的方式获得输出
【发布时间】:2018-08-19 07:41:30
【问题描述】:

我在 python 中编写了一个脚本来抓取一些项目 names 以及 review textsreviewers 使用他们的 api 从网页连接到每个项目名称。问题是我的下面的脚本可以部分地做这些事情。我需要有条不紊地做这些。

例如,在每个项目name 中有多个review textsreviewer names 连接到它。我希望将它们放在以下列中:

Namereview textreviewerreview textreviewer-----

基本上,我不知道如何在我的脚本中以正确的方式使用已经定义的for loop。最后,很少有项目names 没有任何reviewsreviewers,所以当它没有找到任何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

任何解决此问题的帮助将不胜感激。

【问题讨论】:

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


    【解决方案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'}]}
    

    希望这会有所帮助!

    【讨论】:

    • 当我执行你建议的脚本时,它会抛出一个错误:Traceback (most recent call last): File "C:\Users\WCS\AppData\Local\Programs\Python\Python36-32\demo000000.py", line 65, in <module> review_data['reviews'].append(review_data) KeyError: 'reviews'
    • 我已经进行了编辑。问题出在变量名上。现在检查代码。
    • 它似乎以正确的方式工作,直到它遇到一个没有yelpReviews 连接到名称的容器。你能告诉我如何绕过这个错误,因为很少有名字没有评论。顺便说一句,这是我在中途遇到的错误Traceback (most recent call last): File "C:\Users\WCS\AppData\Local\Programs\Python\Python36-32\demo000000.py", line 101, in <module> for texualreviews in req.json()['yelpReviews']: KeyError: 'yelpReviews'
    • 除此之外使用try
    猜你喜欢
    • 1970-01-01
    • 2017-06-04
    • 2021-08-31
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    • 2017-02-26
    • 2021-02-03
    • 1970-01-01
    相关资源
    最近更新 更多