我用python写了一个蜘蛛程序。它可以递归地抓取网页。我想避免下载相同的页面,因此我将网址存储在列表中,如下所示:
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)
但是有一个问题,当链接过多时,url会很大,代码if l not in urls
效率较低。如何解决问题?避免重复下载网址而又不占用太多内存并提高效率的最佳方法是什么?
最佳答案
您可以将网址设置为 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
的平均情况要好。
关于python - 如何避免 python 蜘蛛程序中出现重复的下载网址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26771396/