Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python 2.7的Dictionary/JSON问题_Python_Facebook_Json_Facebook Graph Api_Python 2.7 - Fatal编程技术网

使用Python 2.7的Dictionary/JSON问题

使用Python 2.7的Dictionary/JSON问题,python,facebook,json,facebook-graph-api,python-2.7,Python,Facebook,Json,Facebook Graph Api,Python 2.7,我正在考虑使用Python2.7从Facebook上抓取一些数据。我的代码基本上是通过修改Facebook个人资料ID来增加的,然后捕获页面返回的详细信息 我想从graph.facebook.com/4中获取数据的页面示例 下面是我的代码: import scraperwiki import urlparse import simplejson source_url = "http://graph.facebook.com/" profile_id = 1 while True:

我正在考虑使用Python2.7从Facebook上抓取一些数据。我的代码基本上是通过修改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数据库中

谢谢

关于此代码的错误有什么建议吗

对。你正在接受你所有的错误。在
try
下的块中可能会出现大量错误。如果该块中出现任何错误,您可以继续,而不打印任何内容

只有在处理特定错误时,才应使用
try
/
块,但
块除外

修改代码,使其如下所示:

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等


如果您想处理没有数据的情况,请找到一种专门处理该情况的方法。吞下所有错误是不好的做法。

您是否尝试过打印
results\u json
?如果您没有吞下
try
块中的所有错误,会发生什么?Bryan,这之后立即打印“print results\u json”的结果与预期一致:{'username':'zuck'、'first_name':'Mark'、'last_name':'Zuckerberg'、'name':'Mark-Zuckerberg'、'locale':'en_-US'、'gender':'male'、'link':'id':'4'}@Wilduck是完全正确的。try块中该行上方的任何错误都将被捕获,这将导致绝对没有输出。虽然它可能会捕获许多可能的错误,但最有可能的错误可能是
KeyError
此外,所有这些
data['locale']=result['locale']的目的是什么
行,它们只是在一个键一个键地复制字典?为什么不直接将
result
传递到
sqlite.save
,比如
scraperwiki.sqlite.save(unique_keys=['id',data=result)
?谢谢@wilduck。在Python中查看响应时,非相关页面返回的实际错误是HTTPError(400-请求不正确)。因此,我想我可以处理HTTPError?这听起来是一个不错的方法。此外,您应该尝试在
try
块中使用尽可能少的数据。您可能还希望使用except块来记录
id
没有返回任何内容的数据。