Fehler bei replace().. object not callable

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
paigo
User
Beiträge: 3
Registriert: Donnerstag 19. April 2007, 18:09

Hi Leute!

Ich versuche, mit Python und Beautiful Soup eine HTML-Seite zu parsen und einen Text zwischen zwei bestimmten Tags herauszufiltern. Klappt soweit auch ganz gut, nur werden die Tags (hier "<p></p>") mit angezeigt. Die beiden will ich mit replace() löschen.
Leider bekomme ich folgenden Fehler angezeigt: "TypeError: 'NoneType' object is not callable"

Hier der code:

Code: Alles auswählen

import urllib
from BeautifulSoup import BeautifulSoup
f = urllib.urlopen("http://xxx.de/xxx.html")
s = f.read()
f.close()

soup = BeautifulSoup(s);
res = soup.find("p", { "class" : "css_class" });
str(res);
res.replace('<p class="css_class">', '');
res.replace('</p>', '');
print res;
Hat da jemand einen Hinweis für mich?

Gruß,
paigo
senft
User
Beiträge: 25
Registriert: Montag 31. März 2008, 14:47

Deine Zeile str(res) liefert zwar einen String zurück, dieser wird aber an keinen Namen gebunden (und vor allem wird der nicht in res geschrieben).
Du bräuchtest sowas wie res = str(res).

Grüße

PS: Du brauchst in Python keine Semikolons am Zeilenende.
Benutzeravatar
paigo
User
Beiträge: 3
Registriert: Donnerstag 19. April 2007, 18:09

senft hat geschrieben:Deine Zeile str(res) liefert zwar einen String zurück, dieser wird aber an keinen Namen gebunden (und vor allem wird der nicht in res geschrieben).
Du bräuchtest sowas wie res = str(res).
Ah, Newbie-Fehler. Danke danke ;)
senft hat geschrieben:PS: Du brauchst in Python keine Semikolons am Zeilenende.
Hast recht, habe ich ganz vergessen. Bin das von allen anderen Sprachen gewöhnt.
BlackJack

@paigo: Wobei das Umwandeln in eine Zeichenkette um die dann weiter zu verarbeiten irgendwie umständlicher und fehleranfälliger erscheint als wenn Du einfach den Text aus dem Tag holst. Schau Dir einfach mal an was man `find()` noch so alles an Argumenten übergeben kann.
Benutzeravatar
paigo
User
Beiträge: 3
Registriert: Donnerstag 19. April 2007, 18:09

Ich hätte eigentlich auch vermutet, dass es da ein Attribut für gibt, aber die Dokumentation ist irgendwie sehr Newb-unfreundlich und sagt mir im Hinblick auf mein Problem nicht viel.
Vielleicht werde ich mal in den standard Python-Functions kramen.
Antworten