Seite 1 von 1

Crawling - Homepage

Verfasst: Freitag 8. Mai 2015, 12:42
von SeriousRuffy
Hallo zusammen,

versuche derzeit mein erstes Spider/Crawling Script zu schreiben und brauche eure Hilfe/Tipps bei einer Sache. Mein Ziel ist es ein Teil des Links rauszufiltern. Solle quasi das folgende Ergebnis bekommen:
/example/view.php?id=34

Das ist mein Code:

Code: Alles auswählen

import requests
from bs4 import BeautifulSoup

def trade_spider(max_pages): 

    page = 1
    while page <= max_pages:
        url = "example" + str(page)
        source_code = requests.get(url)
        plain_text = source_code.text
        soup = BeautifulSoup(plain_text)
        for link in soup.findALL("a", {"class": "featured-playlist-title"}):
            href = link.get("href")
            print(href)
        page += 1

trade_spider(1)

Aber leider erhalte ich die folgende Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "C:/Users/Example/PycharmProjects/untitled/Example.py", line 19, in <module>
    trade_spider(1)
  File "C:/Users/Example/PycharmProjects/untitled/Example.py", line 14, in trade_spider
    for link in soup.findALL("a", {"class": "featured-playlist-title"}):
TypeError: 'NoneType' object is not callable

Könnt ihr mir Tipps geben, wie ich das Problem lösen kann? Danke für euer Feedback:)

Re: Crawling - Homepage

Verfasst: Freitag 8. Mai 2015, 13:35
von Hyperion
Den Namen ``findALL`` wird es im Modul sicher nicht geben ;-) (Man muss schon auf Groß- und Kleinschreibung achten).

Du suchst in diesem Kontext eventuell auch die *Funktion* ``find_all`` - nicht die Methode aus BS3-Zeiten? Dein Import deutet darauf hin ;-)

Die ``while``-Schleife bestehend aus den Zeilen 6, 7 und 15 würde man besser in eine ``for``-Schleife umschreiben, da man die genaue Anzahl an Durchläufen a priori kennt. Das ist übrigens eine Fausregel: Ist von vornherein klar, wie oft man eine Schleife durchläuft, nutze ``for``! (Der Umkehrschluss ist dagegen ungültig: Es gibt durchaus Fälle, bei denen man ``for`` ebenfalls verwenden kann und sollte, wenn die Anzahl nicht bekannt ist!)

Re: Crawling - Homepage

Verfasst: Sonntag 10. Mai 2015, 19:42
von SeriousRuffy
Danke für dein Feedback:)

Re: Crawling - Homepage

Verfasst: Sonntag 10. Mai 2015, 23:06
von nomnom
Der Name „source_code“ für das Objekt, das „requests.get“ dir zurückgibt, ist übrigens sinnlos, denn das, was du „plain_text“ nennst, ist der Source-Code, und das, was du „source_code“ nennst, ist ein requests.Response-Objekt.