所以我正在尋找一種動態的方式來抓取一個網站,並從每個頁面抓取鏈接。我決定嘗試Beauitfulsoup。兩個問題:我如何更動態地執行此操作,然後使用嵌套while語句搜索鏈接。我想從本網站獲取所有鏈接。但我不想繼續嵌套while循環。使用python來抓取一個網站
topLevelLinks = self.getAllUniqueLinks(baseUrl)
listOfLinks = list(topLevelLinks)
length = len(listOfLinks)
count = 0
while(count < length):
twoLevelLinks = self.getAllUniqueLinks(listOfLinks[count])
twoListOfLinks = list(twoLevelLinks)
twoCount = 0
twoLength = len(twoListOfLinks)
for twoLinks in twoListOfLinks:
listOfLinks.append(twoLinks)
count = count + 1
while(twoCount < twoLength):
threeLevelLinks = self.getAllUniqueLinks(twoListOfLinks[twoCount])
threeListOfLinks = list(threeLevelLinks)
for threeLinks in threeListOfLinks:
listOfLinks.append(threeLinks)
twoCount = twoCount +1
print '--------------------------------------------------------------------------------------'
#remove all duplicates
finalList = list(set(listOfLinks))
print finalList
我的第二個問題是有無論如何告訴我是否有從網站的所有鏈接。請原諒我,我對Python有點新(大約一年),我知道我的一些流程和邏輯可能是幼稚的。但我必須以某種方式學習。主要我只是想使用嵌套while循環來做到這一點更加動態。預先感謝您的任何見解。
爲什麼不能你是不是隻用一個數組作爲所有鏈接的累加器,然後在你發現網站上有更多的時候把它們排隊呢? –
好的,好主意。我將如何繼續尋找更多。上面的代碼只在頁面樹中向下三級。我想讓這個更動態,然後嵌套循環 – hackthisjay
你不需要嵌套。通過頁面的html運行一次,並有一個所有鏈接的數組。然後通過下一個鏈接。除非你想深度優先,那麼爲什麼你不使用遞歸函數,儘管最終它會溢出堆棧......網絡很大:O –