Ich benutze dryscrape/webkit_server für scraping Javascript-Websites.Dryscrape/webkit_server Speicherleck
Die Speicherauslastung des Prozesses webkit_server scheint mit jedem Aufruf von session.visit() zu steigen. Es passiert mir mit dem folgenden Skript:
import dryscrape
for url in urls:
session = dryscrape.Session()
session.set_timeout(10)
session.set_attribute('auto_load_images', False)
session.visit(url)
response = session.body()
Ich bin über ca. 300 URLs und nach 70-80 URLs Webkit_Server benötigt ca. 3 GB Speicherplatz. Es ist jedoch nicht wirklich der Speicher, der das Problem für mich darstellt, aber es scheint, dass dryscrape/webkit_server mit jeder Iteration langsamer wird. Nach den genannten 70-80 Iterationen ist dryscrape so langsam, dass es einen Timeout-Fehler auslöst (set timeout = 10 sec) und ich das Python-Skript abbrechen muss. Ein Neustart des webkit_servers (z. B. nach jeweils 30 Iterationen) könnte helfen und würde den Speicher leeren, jedoch bin ich mir nicht sicher, ob die "Speicherlecks" wirklich dafür verantwortlich sind, dass das trockene Kratzen immer langsamer wird.
Kann jemand den webkit_server neu starten, damit ich das testen konnte?
Ich habe keine akzeptable Problemumgehung für dieses Problem gefunden, aber ich möchte auch nicht zu einer anderen Lösung (selen/phantomjs, ghost.py) wechseln, da ich einfach dryscrape wegen seiner Einfachheit liebe. Dryscrape funktioniert super übrigens. wenn man nicht zu viele URLs in einer Sitzung iteriert.
Dieses Problem wird auch
https://github.com/niklasb/dryscrape/issues/41
und hier
Solange dryscrape einen Python-Code hat, könnten Sie '@ profile'-Dekoratoren werfen und [mprof] (https://pypi.python.org/pypi/memory_profiler/0.33) oder [kernprof] (https://github.com/rkern/line_profiler). Sie könnten es auf Ihrem eigenen Code ausführen, aber das wird wahrscheinlich nicht annähernd so hilfreich sein. –
Danke, Wayne! – Baili