Rekursionstiefehler bei Verwendung von BeautifulSoup mit Multiprocessing-Pool-Map

8

Ich habe BeautifulSoup zum Parsen von HTML-Dateien verwendet, während alle Skripte, die ich schreibe, gut, aber langsam sind. Also experimentiere ich mit mehreren Bearbeiterpools zusammen mit BeautifulSoup, damit mein Programm schneller ausgeführt werden kann (ich habe etwa 100.000 - 1.000.000 HTML-Dateien geöffnet). Das Skript, das ich geschrieben habe, ist komplexer, aber ich habe hier ein kleines Beispiel niedergeschrieben. Ich versuche so etwas zu machen und bekomme den Fehler

'RuntimeError: Die maximale Rekursionstiefe wurde überschritten, während ein Objekt inkorporiert wurde'

Bearbeiteter Code

%Vor%

Nachdem ich einige Posts durchsucht und gegraben habe, habe ich erfahren, dass der Fehler auftritt, weil BeautifulSoup die Tiefe des Python-Interpreter-Stacks überschreitet. Ich habe versucht, das Limit zu erhöhen und das gleiche Programm laufen zu lassen (ich ging auf 3000), aber der Fehler bleibt gleich. Ich habe aufgehört, das Limit zu erhöhen, weil das Problem mit BeautifulSoup beim Öffnen der HTML-Dateien ist.

Die Verwendung von Multiprocessing mit BeautifulSoup wird meine Ausführungszeit beschleunigen, aber ich bin nicht in der Lage, herauszufinden, wie man es anwendet, um die Dateien zu öffnen.

Hat jemand einen anderen Ansatz, wie man BeautifulSoup mit Multiprocessing nutzen kann oder wie man diese Art von Fehlern überwinden kann?

Jede Art von Hilfe wird geschätzt werden, ich sitze stundenlang, um es zu reparieren und zu verstehen, warum ich den Fehler bekomme.

Bearbeiten

Ich habe den obigen Code mit den Dateien getestet, die ich in den Pfaden angegeben habe und ich habe den gleichen RuntimeError wie oben

Die Dateien sind hier zugänglich ( Ссылка )

    
kich 29.04.2012, 17:56
quelle

1 Antwort

3

Ich denke, der Grund ist die Rückgabe des gesamten soup.title -Objekts. Es scheint, dass alle children und parent Elemente und ihre Kinder und Eltern und so weiter in diesem Moment analysiert werden, und dies erhöht den Rekursionsfehler.

Wenn der Inhalt des Objekts das ist, was Sie brauchen, können Sie einfach die str -Methode:

aufrufen %Vor%

Leider bedeutet das, dass Sie nicht mehr auf alle anderen Informationen der bs4-Bibliothek zugreifen können.

    
Sebastian Werk 01.11.2012 20:18
quelle