the*_*men 3 python json dictionary python-2.7
我目前有一个Python 2.7脚本,可以抓取Facebook并从每个页面捕获一些JSON数据.JSON数据包含个人信息.下面是JSON数据的示例: -
{
"id": "4",
"name": "Mark Zuckerberg",
"first_name": "Mark",
"last_name": "Zuckerberg",
"link": "http://www.facebook.com/zuck",
"username": "zuck",
"gender": "male",
"locale": "en_US"
}
Run Code Online (Sandbox Code Playgroud)
JSON值可能因页面而异.以上示例列出了所有可能的内容,但有时候,"username"等值可能不存在,我可能会遇到JSON数据,例如: -
{
"id": "6",
"name": "Billy Smith",
"first_name": "Billy",
"last_name": "Smith",
"gender": "male",
"locale": "en_US"
}
Run Code Online (Sandbox Code Playgroud)
有了这些数据,我想填充一个数据库表.因此,我的代码如下: -
results_json = simplejson.loads(scraperwiki.scrape(profile_url))
for result in results_json:
profile = dict()
try:
profile['id'] = int(results_json['id'])
except:
profile['id'] = ""
try:
profile['name'] = results_json['name']
except:
profile['name'] = ""
try:
profile['first_name'] = results_json['first_name']
except:
profile['first_name'] = ""
try:
profile['last_name'] = results_json['last_name']
except:
profile['last_name'] = ""
try:
profile['link'] = results_json['link']
except:
profile['link'] = ""
try:
profile['username'] = results_json['username']
except:
profile['username'] = ""
try:
profile['gender'] = results_json['gender']
except:
profile['gender'] = ""
try:
profile['locale'] = results_json['locale']
except:
profile['locale'] = ""
Run Code Online (Sandbox Code Playgroud)
我有这么多尝试/例外的原因是考虑网页上不存在键值的时间.尽管如此,这似乎是解决这个问题的一种非常集中和混乱的方式.
如果我删除这些try/exception子句,如果我的刮刀遇到丢失的密钥,它会返回一个KeyError
这样的,"KeyError: 'username'"
并且我的脚本停止运行.
有关处理这些错误的更智能和更改进的方法的任何建议,以便在遇到丢失的密钥时,脚本继续.
我已经尝试创建一个JSON值列表,并期望使用IF子句迭代它们,但我无法弄明白.
改用.get()
方法:
>>> a = {'bar': 'eggs'}
>>> a['foo']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'foo'
>>> a.get('foo', 'default value')
'default value'
>>> a.get('bar', 'default value')
'eggs'
Run Code Online (Sandbox Code Playgroud)
该.get()
方法返回所请求键的值,如果缺少键,则返回默认值.
或者,您可以为每个键创建一个包含空字符串的新dict并.update()
在其上使用:
profile = dict.fromkeys('id name first_name last_name link username gender locale'.split(), '')
profile.update(result)
Run Code Online (Sandbox Code Playgroud)
dict.fromkeys()
创建一个字典,将您请求的所有键设置为给定的默认值(''
在上面的示例中),然后我们使用.update()
从result
字典中复制所有键和值,替换已存在的任何键.
归档时间: |
|
查看次数: |
2647 次 |
最近记录: |