Вам нужно
finalList.extend(self.crawlSite(childLinks))
не просто
self.crawlSite(childLinks)
Вам необходимо объединить список, возвращенный внутренними crawlSite()
s, со списком, уже существующим во внешнем crawlSite()
. Хотя все они называются finalList
, у вас есть разные списки в каждой области.
Альтернативное (и лучшее) решение состоит в том, чтобы finalList был переменной экземпляра (или нелокальной переменной какого-либо типа), а не просто локальной переменной, чтобы он был общим для всех областей действия crawlSite()
s:
def __init__(self, *args, **kwargs):
self.finalList = set()
def crawlSite(self, linksList):
for link in linksList:
if link not in self.finalList:
print link
self.finalList.add(link)
childLinks = self.getAllUniqueLinks(link)
length = len(childLinks)
print 'Total links for this page: ' + str(length)
self.crawlSite(childLinks)
Вам просто нужно убедиться, что вы self.finalList = []
хотите начать все заново с того же экземпляра.
Редактировать: Исправил код, поместив рекурсивный вызов в блок if
. Использовал набор. Кроме того, linksList
не должен быть списком, просто повторяемым объектом, поэтому удалите вызов list()
из цикла for
. Набор был предложен @ Ray-Toal