Problem mit String.Count

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.
Nyrk
User
Beiträge: 16
Registriert: Freitag 17. April 2009, 22:18

Problem mit String.Count

Beitragvon Nyrk » Freitag 17. April 2009, 22:23

Hallo,

ich habe bisher folgenden Code:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import urllib2
from BeautifulSoup import BeautifulSoup 

url = urllib2.urlopen("http://www.domain.de")
html = url.read();


soup = BeautifulSoup(html)

# Alle Links raus suchen:
for anker in soup("a"):
    links = dict(anker.attrs).get("href")
    if links.count("King") > 0:
         print links
   


Dieser zeigt mir alle Links an, die im Namen "King" haben.

Sobald ich aber die Domain ändere in http://www.domain.de/index.php?site=100

so kommt folgende Fehlermeldung:

Traceback (most recent call last):
File "test.py", line 16, in <module>
if links.count("King") > 0:
AttributeError: 'NoneType' object has no attribute 'count'


Woran liegts?

Gruß

Nyrk
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Beitragvon derdon » Freitag 17. April 2009, 22:43

Schreibe den Teil mit der Bedingung so:

Code: Alles auswählen

if links:
    print links
else:
    print 'No links were found on the given URL %s' % url
Erklärung: Wenn keine Links gefunden wurden, dann hat das Objekt mit dem Namen `links` den Wert None. Das Builtin None hat aber keine Methode count, daher der AttributeError.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Beitragvon sma » Samstag 18. April 2009, 10:20

Übrigens wäre "'King' in links" IMHO einfacher. Außerdem würde ich die Variable "links" mal "href" nennen, denn das ist sei: Ein Attributwert eines <A>-Elements, jedoch weder Plural noch ein Link. Ich bin mir im übrigen relativ sicher, dass das "dict" um "anker.attrs" herum unnötig ist und man einfach "anker['href']" schreiben kann. Dann fällt auch sofort auf, was jetzt ja das Problem ist, dass ein <A> kein HREF-Attribut hat. Man kann natürlich auch "anker.get('href')" für das alte Verhalten benutzen.

Stefan
Nyrk
User
Beiträge: 16
Registriert: Freitag 17. April 2009, 22:18

Beitragvon Nyrk » Samstag 18. April 2009, 21:53

@derdon: danke, die if anweisung wars!

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]