2016-12-02 3 views
-1

Ich versuche, Code zu schreiben, Websites und überspringt die ersten 20 Zeichen und druckt die nächste 100.Unhashable Typ ‚Scheibe‘

Dies ist der Code Ich habe so weit kommt:

i = 0 
while i <len(urls): 
    html = urllib.request.urlopen(urls[i]) 
    bsobject = BeautifulSoup(html.read(), "html.parser")  
    print(bsobject.body[20:120]) 
    i+=1 

ich betreibe es und es gibt mir den Fehler „Typeerror: unhashable Typ:‚Scheibe‘“

Jede Hilfe ist willkommen :)

+2

'bsobject.body' ist ein Objekt, dessen Text etwas wie' bsobject.body.string [20: 120] ' –

+1

' bsobject.body' ist ein BeautifulSoup 'Tag'-Objekt, keine Zeichenkette. Es stellt die geparste Struktur des Dokumentkörpers dar und nicht nur eine Folge von Zeichen. – user2357112

+1

Seite Kommentar zu Ihrer Schleife. Ein pythonischer Loop wäre "für URL in URLs:". Dann brauchst du überhaupt kein 'i'. – CAB

Antwort

0
for url in urls: 
    html = urllib.request.urlopen(url) 
    bsobject = BeautifulSoup(html.read(), "html.parser") 
    print(str(bsobject.body)[20:121]) 

Dieser Code funktioniert, ich bin mir nicht sicher warum, aber es tut es.

+0

Die obigen Kommentare antworten, warum 'bsobject.body' ein BeautifulSoup' Tag'-Objekt ist, keine Zeichenfolge. Mit 'str()' -ing hast du eine Saite gemacht, die du dann mit '[20: 121]' schneiden kannst. –

Verwandte Themen