Seite 1 von 1

Problem mit String.Count

Verfasst: Freitag 17. April 2009, 22:23
von Nyrk
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

Verfasst: Freitag 17. April 2009, 22:43
von derdon
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.

Verfasst: Samstag 18. April 2009, 10:20
von sma
Ü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

Verfasst: Samstag 18. April 2009, 21:53
von Nyrk
@derdon: danke, die if anweisung wars!