所以我正在寻找一种动态的方式来抓取一个网站,并从每个页面抓取链接。我决定尝试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 –