私は現在、Facebook をスクレイピングし、各ページからいくつかの JSON データを取得する Python 2.7 スクリプトを持っています。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 値はページごとに異なる場合があります。上記の例はすべての可能性をリストしていますが、「username」などの値が存在しない場合があり、次のような 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'] = ""
非常に多くの試行/例外がある理由は、キー値が Web ページに存在しない場合を考慮するためです。それにもかかわらず、これはこの問題を処理するための非常に厄介で面倒な方法のようです。
KeyError
これらの try / exception 句を削除すると、スクレイパーが不足しているキーに遭遇した場合、などを返し"KeyError: 'username'"
、スクリプトの実行が停止します。
これらのエラーを処理するためのよりスマートで改善された方法に関する提案があれば、不足しているキーが発生した場合でもスクリプトが続行されます。
JSON 値のリストを作成しようとしましたが、IF 句を使用してそれらを反復処理しようとしましたが、わかりません。