【问题标题】:Python JSON scraping - how can I handle missing values?Python JSON 抓取 - 如何处理缺失值?
【发布时间】:2020-05-06 07:12:58
【问题描述】:

我对编码很陌生,所以我在学习过程中学到了很多东西。这个问题让我很困惑,尽管我可以在这里找到几个类似的问题,但我找不到一个对我有用或具有可识别语法的问题。

我正在尝试从 JSON API 中抓取各种用户数据,然后将这些值存储在我设置的 MySQL 数据库中。

代码在大多数情况下似乎运行良好,但一些用户没有我试图在 JSON 中抓取的属性,因此我留下了我似乎无法阻止的 Nonetype 错误。

如果可能的话,我只想将“0”存储在 json 不包含该属性的数据库中。

在下面的 m/sn-p 中,这适用于有工作的用户,但没有工作的用户在工作职位上返回 Nonetype,显然打破了循环。

response = requests.get("URL")
json_obj = json.loads(response.text)

timer = json_obj['timestamp']
jobposition = json_obj['job']['position']

query = "INSERT INTO users (timer, jobposition) VALUES (%s, %s)"
values = (timer, jobposition)

cursor = db.cursor()
cursor.execute(query, values)
db.commit()

提前致谢!

【问题讨论】:

标签: python json


【解决方案1】:

您可以使用字典的 get() 方法,如下所示

timer = json_obj.get('timestamp', 0)

0 是默认值,如果没有 'timestamp' 属性,它将返回 0。 对于职位,你可以这样做

jobposition = json_obj['job'].get('position', 0) if 'job' in json_obj else 0

【讨论】:

  • 该死的我已经这么接近这个解决方案很多次了,但不知何故显然无法登陆语法。看来我不是一直到那里,我仔细看了看.. 某些 json 属性并不适用于所有用户,可以按照您建议的方式处理。但就缺少工作职位而言,这是实际的 json: ? "job": { "position": "None", "company_id": 0, "company_name": "None"一个空值?
  • 你是对的,当被 " 包围的值是一个字符串值,如果它只是 None 它将是一个 None 类型。
  • 似乎我实际上误解了导致问题的属性。 “无”字符串处理得很好,我遇到了其他属性不存在的问题,这些属性已用您的代码修复。谢谢!
【解决方案2】:

试试这个

try:
 jobposition = json_obj['job']['position']
except:
 jobposition = 0

【讨论】:

    【解决方案3】:

    您可以使用数据类更清楚地声明数据模式:

    from dataclasses import dataclass
    
    from validated_dc import ValidatedDC
    
    
    @dataclass
    class Job(ValidatedDC):
        name: str
        position: int = 0
    
    
    @dataclass
    class Workers(ValidatedDC):
        timer: int
        job: Job
    
    
    input_data = {
        'timer': 123,
        'job': {'name': 'driver'}
    }
    
    workers = Workers(**input_data)
    
    assert workers.job.position == 0
    

    https://github.com/EvgeniyBurdin/validated_dc

    【讨论】:

      猜你喜欢
      • 2016-07-04
      • 1970-01-01
      • 2017-01-15
      • 2015-12-22
      • 1970-01-01
      • 1970-01-01
      • 2020-11-01
      • 2020-08-22
      • 2018-07-15
      相关资源
      最近更新 更多