我目前有一个 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"
}
JSON 值可能因页面而异。上面的示例列出了所有可能的情况,但有时,“用户名”之类的值可能不存在,我可能会遇到 JSON 数据,例如:-
{
"id": "6",
"name": "Billy Smith",
"first_name": "Billy",
"last_name": "Smith",
"gender": "male",
"locale": "en_US"
}
有了这些数据,我想填充一个数据库表。因此,我的代码如下: -
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'] = ""
我有这么多尝试/例外的原因是考虑到网页上不存在键值的情况。尽管如此,这似乎是处理这个问题的一种非常笨拙和混乱的方式。
如果我删除这些 try/exception 子句,如果我的刮刀遇到丢失的键,它会返回一个KeyError
例如"KeyError: 'username'"
并且我的脚本停止运行。
有关处理这些错误的更智能和改进方法的任何建议,以便在遇到丢失的密钥时,脚本继续。
我尝试创建一个 JSON 值列表,并希望使用 IF 子句遍历它们,但我就是想不通。