2017-09-17 5 views
0

Je dois gratter des pages de facebook pour mes études et j'ai un problème avec ceci. Je suis débutant en python. J'ai trouvé un code python sur github: https://github.com/precognox-admin/FBscraper/blob/master/src/scrapeFB.pyComment puis-je corriger python 2.7 keyerror? (Essayer de srcape facebook pages)

Voici un morceau de code:

def write_data(self, d): 

    date_inserted = datetime.now().strftime("%Y-%m-%d %H:%M:%S") 
    messages = d['data'] 
    self.no_messages += len(messages) 

    for message in messages: 

     person_name = message['from']['name'] 
     person_id = message['from']['id'] 
     person_hash_id = hashlib.md5(person_id.encode('utf-8')).hexdigest() 
     published_date = message['created_time'] 
     published_date = datetime.strptime(published_date, "%Y-%m-%dT%H:%M:%S+%f").strftime("%Y-%m-%d %H:%M:%S") 
     post_type = message['type'] 
     post_id = message['id'] 
     org_id = post_id.split('_')[0] 
     status_id = post_id.split('_')[1] 
     post_link = 'https://www.facebook.com/%s/posts/%s' % (org_id, status_id) 

Quand je veux exécuter le fichier .py je reçois ce message d'erreur:

Traceback (most recent call last): 
    File "FBscraper/src/scrapeFB.py", line 325, in <module> 
    s.scrape() 
    File "FBscraper/src/scrapeFB.py", line 264, in scrape 
    self.write_data(d) 
    File "FBscraper/src/scrapeFB.py", line 91, in write_data 
    person_name = message['from']['name'] 
KeyError: 'from' 

Je sais que cela signifie que la clé "from" n'existe pas mais qu'elle devrait l'être. Voici un JSON par exemple:

{ 
    "posts": { 
    "data": [ 
     { 
     "comments": { 
      "data": [ 
      { 
       "created_time": "2017-09-17T08:42:41+0000", 
       "from": { 
       "name": "Rafiq Ahmed", 
       "id": "10207278423025677" 
       }, 
       "message": "Admirable and applaudable under the 
circumstances!", 
       "id": "10155950241431323_10155950367031323" 
      } 

J'ai lu et whatched et documentations lu tutotrials sur youtube et sur d'autres côtés. J'ai essayé la méthode .get() aussi mais ça ne marche pas. :/

Répondre

0

Vous devriez essayer: messages = d['data'][0]['data'][0]