Derzeit ist meine Struktur Flask, Redis, RabbitMQ and Celery
. In meinem Kratzen verwende ich requests
und BeautifulSoup
. Meine Flasche läuft auf Apache und WSGI. Dies ist auf Prod. Mit app.run(threaded=True)
Scraping Website mit Sellerie
Ich habe 25 APIs. 10 sind, um die URL wie Header usw. zu kratzen, und der Rest besteht darin, eine 3rd-Party-API für diese URL zu verwenden.
Ich benutze Akkord für die Verarbeitung meiner APIs und erhalten Daten von den APIs mit requests
.
Für meine Akkord-Header habe ich 3 Arbeiter, während auf meinem Rückruf ich nur 1. Ich habe ein Engpass Problem mit ConnectTimeoutError
und MaxRetryError
. Als ich einen Thread las, sagte er, dass er einen Timeout für jeden Prozess machen sollte, weil dieser Fehler bedeutet, dass Sie den Remote-Server überladen.
Das Problem ist, da ich einen Akkord verwende, hat es keinen Sinn, eine Zeit Schlaf zu verwenden, da der 25 API-Aufruf zur gleichen Zeit ausgeführt wird. Ist das jemand begegnet? Oder mache ich das falsch?
Der Thread, den ich lese, scheint zu sagen, die Anforderungen zu pycurl zu ändern oder Scrapy zu verwenden. Aber ich denke nicht, dass das der Fall ist, da ConnectTimeoutError
über meinen Host ist, der einen spezifischen URL-Server überlädt.
Mein Akkord Prozess:
callback = create_document.s(url, company_logo, api_list)
header = [api_request.s(key) for key in api_list.keys()]
result = chord(header)(callback)
In api_request Aufgabenanforderungen verwendet wird.
Haben Sie einen Link zu eine Dokumentation oder ein Beispielcode? – Bazinga
Ich habe einen Referenzlink für Sie hinzugefügt. –