-1

我正在考虑使用 Python 2.7 从 Facebook 抓取一些数据。我的代码基本上通过 1 更改 Facebook 个人资料 ID 来增加,然后捕获页面返回的详细信息。

我希望从中捕获数据的页面示例是 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 回答