2014-10-31 245 views
-4

我寫了一個函數,即從網頁爬蟲(url)。有一段時間是真的,所以它應該繼續運行,如果什麼都不運行。我有整個函數的返回,它返回,所以我知道它停了。我印刷了每個圈子可以印刷的所有東西,而且一切看起來都很完美。只是因爲某種原因停下來的時候,我不知道。什麼會導致while循環停止?

的邏輯是我有一個初始urls[]

每個循環,

讀取從urls一個網址,

如果網址不parent,把它,否則繼續

爬蟲links from URL使用函數爬蟲

put url i ñparent,把linkschildren

放鏈接是不是在父母爲newUrl

如果達到urls結束,urls=newurls, newurls=null

但由於某些原因,循環只能運行30+次,我檢查還有很多孩子的鏈接,所以我不明白爲什麼停止。

newUrl=[] 
parent = [] 
children =[] 
cloud =[] 
i=0 
n=0 

while n<100: 
    n+=1 
    url = urls[i] 
    if url in parent: 
     i += 1 
     continue 
    (links,titles) = crawler(url) 
    parent.append(url) 
    links = list(set(links)) 
    children.append(",".join(links)) 
    cloud.append(titles) 

    links = [link for link in links if link not in parent] 
    newUrl= newUrl+links # is there anyone realy have a look on code 
    print(len(parent)) # I guess noone did 
    i += 1 
    if i == len(urls): 
     urls = list(set(newUrl)) 
     newUrl = [] 
     i=0 
print (n) 
+1

請標記你是在談論蟒蛇。 – HuStmpHrrr 2014-10-31 01:58:08

+0

我保證它不是「沒有理由」。 – Blorgbeard 2014-10-31 02:25:33

+0

@Blorgbeard肯定,應該有一個理由,只是我們都找不到......或者我不會問 – user3754216 2014-10-31 02:26:51

回答

0

在n達到100之前,可能導致您的while循環退出的唯一情況是例外。

如果您的程序內存不足,由於爬蟲函數無限遞歸調用自身(不太可能在您的新代碼中限制爲100),或者您的索引超出了urls數組你的程序邏輯可能導致的邊界,還是其他原因很難預測。