2016-07-18 11 views
0
zu analysieren

Wenn ich json.loads verwenden erhalte ich die Fehler folgendeIch halte den folgenden Fehler immer versuchen, json in Python „String-Indizes ganze Zahlen sein müssen“

string indices must be integers 

ich etwas Forschung tat, und sah, wie jemand mit dem, was Ich dachte, es wäre eine ähnliche Situation. Ich änderte dieses

json.dumps(newstring_two) 

dieser

json.loads(json.dumps(newstring_two)) 

aber es immer noch nicht funktioniert. Hier wird die Funktion habe ich

def panties(): 
     pan_url = 'http://www.panvideos.com' 
     html = requests.get(pan_url, headers=headers) 
     soup = BeautifulSoup(html.text, 'html5lib') 
     video_row = soup.find_all('div', {'class': 'video'}) 

     def youtube_link(url): 
      youtube_page = requests.get(url, headers=headers) 
      soupdata = BeautifulSoup(youtube_page.text, 'html5lib') 
      video_row = soupdata.find('div', {'class': 'video-player'}) 
      entries = [{'text': str(div), 
         } for div in video_row][3]['text'] 

      oldstring = str(entries) 
      removed = '<script type="text/javascript">jwplayer("video-setup").setup(' 
      newstring = oldstring.replace(removed, "") 
      removed_two = ');</script>' 
      newstring_two = newstring.replace(removed_two, "") 
      parsed_json = json.dumps(newstring_two) 
      finishe = parsed_json['file'] 

      return finishe 

     entries = [{'text': div.h4.text, 
        'href': div.a.get('href'), 
        'tube': youtube_link(div.a.get('href')), 
        } for div in video_row][:1] 

     return entries 

aber es funktioniert nicht. Was ist das Problem?

EDIT: meine volle Spur zurück

 Traceback (most recent call last): 
     File "/Users/ray/Desktop/oku/practice/lib/python3.5/site-packages/django/core/handlers/base.py", line 149, in get_response 
     response = self.process_exception_by_middleware(e, request) 
     File "/Users/ray/Desktop/oku/practice/lib/python3.5/site-packages/django/core/handlers/base.py", line 147, in get_response 
     response = wrapped_callback(request, *callback_args, **callback_kwargs) 
     File "/Users/ray/Desktop/oku/super_nu/src/blog/views.py", line 164, in index 
     pan = panties() 
     File "/Users/ray/Desktop/oku/super_nu/src/blog/my_scraps.py", line 166, in panties 
     } for div in video_row][:1] 
     File "/Users/ray/Desktop/oku/super_nu/src/blog/my_scraps.py", line 166, in <listcomp> 
     } for div in video_row][:1] 
     File "/Users/ray/Desktop/oku/super_nu/src/blog/my_scraps.py", line 159, in youtube_link 
     finishe = parsed_json['file'] 
    TypeError: string indices must be integers 
+0

Bitte fügen Sie die vollständige Fehlerrückverfolgung zu Ihrer Frage hinzu! –

+2

'json.dumps()' gibt eine Zeichenfolge zurück. Sie können einen String nicht mit einem Schlüsselnamen indizieren, wie Sie es in 'finishe = parsed_json ['file']' 'tun. –

+2

Auch der Variablenname 'parsed_json' lässt mich denken, dass Sie' json.dumps' und 'json.loads' verwirrt haben. –

Antwort

0

Sie sollten eine ganze Zahl anstelle von 'Datei' Aussage in dieser Zeile verwenden:

finishe = parsed_json['file'] 

So kann es sein, so:

finishe = parsed_json[0] 

Die 0-Nummer im Beispiel kann 1,2,3,4 sein ..... Sie müssen herausfinden, welche die wahre Zahl ist.

+0

Danke für die Antwort, aber das funktioniert nicht. Dadurch wird nur ein einzelnes Zeichen zurückgegeben. Der Ausgang des Tuns, das wäre "{" – losee

+0

dass versuchen: str = "" für i in parsed_json: str + = i Druck str was sehen Sie, wenn Sie es tun? –

1

'newstring_two' ist eine Zeichenfolge, daher sollte parsed_json = json.dumps(newstring_two) ersetzt werden parsed_json = json.loads(newstring_two). siehe JSON encoder and decoder

+0

Wenn ich tun, was Sie erwähnten und dies tun parsed_json ['Datei'] Ich bekomme die folgende Fehlermeldung "Expecting Eigenschaft Name in Anführungszeichen eingeschlossen: Zeile 1 Spalte 2 (char 1)" – losee

+0

'newstring_two' ist nicht Standard-JSON-String. Wenn Sie nur 'Datei'-Feld erhalten, können Sie re verwenden. zum Beispiel 'tube_file = re.search ('file:" (. *?) ",', new_string_two) drucken (tube_file.group (1))' –

Verwandte Themen