Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在抓取JSON响应时跳过不可用的值_Python_Json_Web Scraping_Scrapy - Fatal编程技术网

Python 在抓取JSON响应时跳过不可用的值

Python 在抓取JSON响应时跳过不可用的值,python,json,web-scraping,scrapy,Python,Json,Web Scraping,Scrapy,我有一堆网址,我想刮。某些链接具有其他链接中不存在的值。我想知道,如果URL中没有任何值,如何避免出错 我尝试了尝试和除了之外,但没有成功 在本例中,您将在下面的信息中看到4个值。我写了5个值的表达式,它给了我一个错误。如果值不存在,我希望它跳过 这是我的密码: try: location_1 = schools['examInformation'][0]['cbrLocationShortName'] except: pass try:

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

我尝试了
尝试
除了
之外,但没有成功

在本例中,您将在下面的信息中看到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”

注意:我将scrapy与JSON库一起使用


最简单的修复方法是为except块中的每个变量指定一个None或您的最终“N/a”值,即:

试试看:
地点5=学校['TestFormation'][4]['CBLocationShortName']
除:
位置_5=‘不适用’
屈服{
“位置5”:位置5,
}
如果您希望避免示例中的所有代码重复和异常处理,我将使用安全get方法将其打包到一个循环中:

locations={}
考试信息=学校[“考试信息”]
对于范围内的i(len(考试信息)):
location_key=f'location{i+1}'
位置[location\u key]=考试信息[i]。获取('cbrLocationShortName','N/A')
屈服点

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