2014-11-06 93 views
1

我用python編寫了一個蜘蛛程序。它可以遞歸地抓取網頁。我想避免下載相同的網頁,所以我存儲在一個列表中的網址如下:如何避免在我的python蜘蛛程序中重複下載url?

urls = [] 
def download(mainPage): # mainPage is a link 
    global urls 
    links = getHrefLinks(mainPage) 
    for l in links: 
     if l not in urls: 
      urls.append(l) 
      downPage(l) 

但是有一個問題,當鏈接太多,網址會非常大,而且效率的代碼if l not in urls是低的。如何解決問題?避免重複下載URL的最佳方法是不佔用太多內存並提高效率?

+0

make'urls' a'set':https://docs.python.org/2/library/sets.html – 2014-11-06 04:02:23

+0

看看Scrapy可能是值得的:http://scrapy.org/它可以無需多次下載相同頁面即可進行爬網,多線程以及大量其他內容。 – 2014-11-06 04:12:13

+0

謝謝:-) @AlexWoolford – socket 2014-11-07 06:28:43

回答

3

可以使URL轉換成一個set

urls = set() 
def download(mainPage): # mainPage is a link 
    global urls 
    links = getHrefLinks(mainPage) 
    for l in links: 
     if l not in urls: 
      urls.add(l) #instead of append 
      downPage(l) 

查找的對象,即,x in s是,在average case,複雜性O(1),其比list的平均情況更好的。