2017-05-26 1 views
-1
import requests 
from bs4 import BeautifulSoup 

page = requests.get("http://api.mesowest.net/v2/authapikey=KzdBcPu5cCptvhuS1tagDhZ3CqeQB878nWl") 

soup = BeautifulSoup(page.content, "lxml") 

myWeather = soup.findAll("body") 
token = [elem.text.strip() for elem in myWeather] 
rtoken = token[0:1] 

print (rtoken) 

Das Ergebnis dieses ein Zeichen für alle scheint betrachtet wird: '{"TOKEN": "7657b5ce64f4425d8a6cf30684e62b18"}'schneiden Der Versuch, Streifen, Ersetzen von Zeichen aus Text, der

Ich versuche nur das Token Stück heißt "7657b5ce64f4425d8a6cf30684e62b18" zu greifen. Ich habe die verschiedenen Methoden von token[11,43], [-2,32] und so weiter versucht, aber alle Zeichen scheinen innerhalb [0] definiert zu werden, folglich warum der rtoken = token[0:1] Code alles anstelle des ersten Zeichens auswählt. Ich habe auch versucht, die benötigten Werte zu strippen und zu ersetzen, und es scheint nichts zu funktionieren.

+1

'token' ist ein ** Liste **, die Sie gerade gebaut * eine Liste Verständnis mit *. Die gewünschte Token-Zeichenfolge ** befindet sich im ersten Element in der Liste, Token [0]. Beachten Sie, dass Sie Ihre Token jetzt beenden sollten, nachdem Sie sie öffentlich online veröffentlicht haben. – jonrsharpe

+0

Vielen Dank für die Beratung. Ich habe sie schon losgeworden. – elued

Antwort

0

Ihr "Token" ist eigentlich eine Liste und [0] wählt nur das erste (und einzige?) Element in dieser Liste aus, welches eine Zeichenkette ist. Wenn Sie die Zeichenfolge selbst abzustreifen wollen Sie etwas wie dies zu tun:

rtoken = token[0][11:43] 
+1

Das hat den Trick gemacht. Danke Ofer. – elued

1

@Ofer gab tatsächlich einen schrecklichen Rat.

Der Typ des Antwortinhaltes ist JSON - Sie sollten ihn nicht mit einem HTML-Parser analysieren.

Verwenden Sie die .json() method der requests Antwort:

import requests 

page = requests.get("http://api.mesowest.net/v2/auth?apikey=KzdBcPu5cCptvhuS1tagDhZ3CqeQB878nWl") 
token = page.json()['TOKEN'] 

print (token) 

Drucke:

7ed20f28d4d6436fb6083dd9f18a5241 
Verwandte Themen