2017-05-01 1 views
0

Fehler benötigen:Neu bei Python und versuchen, eine Tabelle zu webscrape, die alle 15 min aktualisiert. erhalte eine Fehlermeldung über eine Zeichenfolge

C: \ Python> Python Traceback (jüngste Aufforderung zuletzt) ​​webscrape.py: File "webscrape.py", Zeile 23, in print ("Hub :“+ Hub) Typeerror: muss str werden, die Liste nicht

Code:

from urllib.request import urlopen as uReq 
from bs4 import BeautifulSoup as soup 

my_url = 'http://www.ercot.com/content/cdr/html/real_time_spp' 

# opening up connection, grabbing the web page 
uClient = uReq(my_url) 
page_html = uClient.read() 
uClient.close() 

# html parsing 
page_soup = soup(page_html, "html.parser") 

# grabs the market conditions 
intervals = page_soup.findAll("div",{"id":"today"}) 

for interval in intervals: 
    hubs = interval.table.tr.th["class"] 

    price_intervals = interval.findAll("td",{"class":"labelClassCenter"}) 
    all_prices = price_intervals[0].text 

    print ("hubs:" + hubs) 
    print ("all_prices:" + all_prices) 
+1

Ja, der Fehler sehr beschreibend ist selbst ... Hub ist eine Liste, so dass Sie es Inhalte wie das nicht zeigen können .... wenn Schreiben Sie zum Beispiel 'print (" Hubs: "+ hubs [0])', Sie erhalten ein Ergebnis ... oder Sie können 'join' verwenden, wie' print ("Hubs:" + hubs.join (",")) ' – Hackerman

Antwort

1

Sie haben sie mit einem Komma zu trennen, so dass sie nicht verketten:

print("hubs:", hubs) 

Sie bekommen die gleiche Warnung wie folgt aus:

>>> print("hi" + [1]) 
Traceback (most recent call last): 
    File "<pyshell#0>", line 1, in <module> 
    print("hi" + [1]) 
TypeError: must be str, not list 
>>> print("hi", [1]) 
hi [1] 

Mit dem Pluszeichen Sie zu verketten versuchen (oder zusammen) die Zeichenfolge und die Liste. Wenn Sie das tun wollen, müssen Sie die Liste einen String machen:

>>> print("hi" + str([1])) 
hi[1] 

Wenn Sie die Werte durch Komma trennen wollen, tun ','.join(hubs).

Hinweis: Wenn Sie Python 2 verwenden, benötigen Sie keine Klammern in der print-Anweisung.

Ein anderer Weg, es zu tun ist, mit String-Formatierung:

print(“hubs: {hubs}”.format(hubs=hubs)) 
+0

Wenn Sie python2 anstelle von python3 verwenden, möchten Sie wahrscheinlich auch nicht die Klammern in der print-Anweisung. –

+0

@DanielH Es sieht so aus, als ob er Python 3 wegen der Klammern in seiner Druckanweisung verwendet. – rassar

+1

Ja, aber aus der Frage und neu für Python, das ist keine Garantie. Als ich zum ersten Mal Python (2) gelernt habe, habe ich oft versehentlich Klammern gesetzt, weil so andere Programmiersprachen (und die meisten anderen Operationen in Python) funktionieren. –

Verwandte Themen