Używam BeautifulSoup do parsowania plików html, podczas gdy wszystkie napisane przeze mnie skrypty działają dobrze, ale wolno. Eksperymentuję więc nad wykorzystaniem wieloprocesowej puli pracowników wraz z BeautifulSoup, aby mój program działał szybciej (mam do otwierania około 100 000 - 1 000 000 plików HTML). Scenariusz, który napisałem, jest bardziej złożony, ale tutaj zapisałem mały przykład. Staram się zrobić coś takiego i wciąż otrzymuję błądBłąd głębi rekursji podczas korzystania z BeautifulSoup z wieloprocesową mapą puli
„RuntimeError: Maksymalna głębokość rekursji przekroczone podczas trawienia obiektu”
kod edytowany
from bs4 import BeautifulSoup
from multiprocessing import Pool
def extraction(path):
soup=BeautifulSoup(open(path),"lxml")
return soup.title
pool=Pool(processes=4)
path=['/Volume3/2316/http/www.metro.co.uk/news/852300-haiti-quake-victim-footballers-stage-special-tournament/crawlerdefault.html','/Volume3/2316/http/presszoom.com/story_164020.html']
print pool.map(extraction,path)
pool.close()
pool.join()
Po wykonaniu niektórych przeszukując i przekopując się przez niektóre posty, dowiedziałem się, że błąd występuje, ponieważ BeautifulSoup przekracza głębokość stosu interpretera Pythona. Próbowałem podnieść limit i uruchomić ten sam program (poszedłem do 3000), ale błąd pozostaje taki sam. Przestałem podnosić limit, ponieważ problem dotyczy programu BeautifulSoup podczas otwierania plików HTML.
Korzystanie z wieloprocesowości w BeautifulSoup przyspieszy mój czas wykonania, ale nie jestem w stanie wymyślić, jak zastosować go do otwierania plików.
Czy ktoś ma jakieś inne podejście do korzystania z BeautifulSoup przy wieloprocesowym przetwarzaniu lub jak znaleźć takie błędy?
Każdy rodzaj pomocy zostanie doceniony, siedzę całymi godzinami próbując to naprawić i rozumiem, dlaczego otrzymuję błąd.
Edit
Testowałem powyższy kod z plikami dałem w ścieżkach i mam ten sam RuntimeError jak wyżej
mogą być dostępne tutaj Pliki (http://ec2-23-20-166-224.compute-1.amazonaws.com/sites/html_files/)
Powyższy skrypt nie generuje błędu, który mi opisałeś. Czy możesz wkleić najprostszy skrypt, który faktycznie przetestowałeś, i że ten błąd jest generowany? – senderle
Witam, dzięki za odpowiedź..i właśnie przetestowałem kod z powyższymi stronami html podanymi w linku i mam błąd "RuntimeError: przekroczono maksymalną głębokość rekursji podczas wytrawiania obiektu" Dzięki za pomoc – kich