【问题标题】:Skip NOT Available values while scraping JSON response在抓取 JSON 响应时跳过 NOT Available 值
【发布时间】:2021-02-03 18:45:31
【问题描述】:

我有一堆要抓取的 URL。某些链接具有其他链接中不存在的值。我想知道如果任何 URL 中都没有值,如何避免出错?

我尝试了tryexcept,但没有成功

在这个link 中,您将在examInformation 下看到4 个值。我为 5 个值编写了表达式,它给了我一个错误。如果值不存在,我希望它跳过。

这是我的代码:

    try:
        location_1 = schools['examInformation'][0]['cbrLocationShortName']
    except:
        pass
    try:
        location_2 = schools['examInformation'][1]['cbrLocationShortName']
    except:
        pass
    try:
        location_3 = schools['examInformation'][2]['cbrLocationShortName']
    except:
        pass
    try:
        location_4 = schools['examInformation'][3]['cbrLocationShortName']
    except:
        pass
    try:
        location_5 = schools['examInformation'][4]['cbrLocationShortName']
    except:
        pass

   yield {
       "Location 1": location_1 if location_1 else "N/A",
       "Location 2": location_2 if location_2 else "N/A",
       "Location 3": location_3 if location_3 else "N/A",
       "Location 4": location_4 if location_4 else "N/A",
       "Location 5": location_5 if location_5 else "N/A",    
   }

我收到以下错误:

UnboundLocalError:赋值前引用了局部变量“location_5”

注意:我正在使用带有 JSON 库的 scrapy

【问题讨论】:

  • CodeWithAwais 我删除了我的答案,因为我太快假设错误是什么。我建议您使用@Madjazz 循环解决方案,它是比重复更好的设计。

标签: python json web-scraping scrapy


【解决方案1】:

最简单的解决方法是将 None 或最终的“N/A”值分配给 except 块中的每个变量,即:

 try:
     location_5 = schools['examInformation'][4]['cbrLocationShortName']
 except:
     location_5 = 'N/A'

    yield {
           "Location 5": location_5,   
    }

如果您想避免示例中的所有代码重复和异常处理,我会使用安全的 get 方法将其打包到一个循环中:

locations = {}
exam_information = schools['examInformation']

for i in range(len(exam_information)):
    location_key = f'Location {i + 1}'
    locations[location_key] = exam_information[i].get('cbrLocationShortName', 'N/A')

yield locations

【讨论】:

    猜你喜欢
    • 2018-01-28
    • 1970-01-01
    • 2013-08-23
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    相关资源
    最近更新 更多