-1

Python 2.7 を使用して Facebook からデータをスクレイピングしようとしています。私のコードは基本的に、Facebook プロファイル ID を 1 変更して、ページから返された詳細を取得することで拡張します。

データを取得しようとしているページの例は、graph.facebook.com/4 です。

以下は私のコードです:

import scraperwiki
import urlparse
import simplejson

source_url = "http://graph.facebook.com/"
profile_id = 1


while True:
    try:
        profile_id +=1
        profile_url = urlparse.urljoin(source_url, str(profile_id))
        results_json = simplejson.loads(scraperwiki.scrape(profile_url))
        for result in results_json['results']:
            print result
            data = {}
            data['id'] = result['id']
            data['name'] = result['name']
            data['first_name'] = result['first_name']
            data['last_name'] = result['last_name']
            data['link'] = result['link']
            data['username'] = result['username']
            data['gender'] = result['gender']
            data['locale'] = result['locale']
            print data['id'], data['name']
            scraperwiki.sqlite.save(unique_keys=['id'], data=data)
        #time.sleep(3)
    except:
        continue
        profile_id +=1

私はこのチェックを実行するためにscraperwikiサイトを使用していますが、コードが機能していることを確認するためだけに使用された「print data ['id']、data ['name']」という行にもかかわらず、データはコンソールに出力されません

このコードの何が問題なのかについて何か提案はありますか? 前述のように、返されたプロファイルごとに、一意のデータをキャプチャして画面に出力し、sqlite データベースに入力する必要があります。

ありがとう

4

1 に答える 1

0

このコードの何が問題なのかについて何か提案はありますか?

はい。あなたはすべてのエラーを飲み込んでいます。の下のブロックでは、非常に多くのことがうまくいかない可能性がありますtry。そのブロックで何か問題が発生した場合は、何も印刷せずに先に進みます。

try/exceptブロックは、特定のエラーを処理する場合にのみ使用してください。

コードを次のように変更します。

while True:
    profile_id +=1
    profile_url = urlparse.urljoin(source_url, str(profile_id))
    results_json = simplejson.loads(scraperwiki.scrape(profile_url))
    for result in results_json['results']:
        print result
        data = {}
        # ... more ...

特定の問題が発生した場合は、詳細なエラー メッセージが表示されます。

コメントでのあなたの懸念について:

エラー処理を行う理由は、たとえばgraph.facebook.com/3を見ると、このページにはユーザーデータが含まれていないため、この情報を照合して次のユーザーにスキップしたくないためです. いいえ 4 など

データがないケースを処理したい場合は、そのケースを具体的に処理する方法を見つけてください。すべてのエラーを飲み込むのは悪い習慣です。

于 2013-02-11T21:25:14.840 に答える