【发布时间】:2011-10-09 19:24:42
【问题描述】:
所以我正在寻找一种动态的方式来抓取网站并从每个页面中获取链接。我决定尝试 Beauitfulsoup。两个问题:如何更动态地执行此操作,然后使用嵌套的 while 语句搜索链接。我想从该站点获取所有链接。但是我不想继续放嵌套的while循环。
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 循环。提前感谢您提供任何见解。
【问题讨论】:
-
为什么不使用一个数组作为所有链接的累加器,然后在网站上找到更多信息时将它们排队?
-
好的,好主意。我将如何继续找到更多。上面的代码只在页面树中向下三层。我想让这个更动态,然后嵌套 while 循环
-
你不需要嵌套。通过页面的 html 运行一次,并拥有所有链接的数组。然后通过下一个链接。除非你想做深度优先,否则为什么不使用递归函数,虽然最终它会溢出堆栈......网络很大:O
标签: python nested while-loop hyperlink web-crawler