@uncollected 可能在评论中为您提供了正确的答案,但我想对此进行扩展。
如果您调用的是精确代码,但嵌套在一个while
块中,它将立即返回第一个结果。你可以在这里做两件事。
我不确定你是如何while
在你自己的上下文中使用的,所以我在for
这里使用了一个循环。
扩展结果列表,并返回整个列表
def getLinks(urls):
""" processes all urls, and then returns all links """
links = []
for givenurl in urls:
page = urllib2.urlopen(givenurl,"",10000)
soup = BeautifulSoup(page, "lxml")
linktags = soup.findAll('span',attrs={'class':'paginationLink pageNum'})
page.close()
BeautifulSoup.clear(soup)
links.extend(linktags)
# dont return here or the loop is over
return links
或者,您可以使用yield
关键字将其设为生成器,而不是返回。生成器将返回每个结果并暂停直到下一个循环:
def getLinks(urls):
""" generator yields links from one url at a time """
for givenurl in urls:
page = urllib2.urlopen(givenurl,"",10000)
soup = BeautifulSoup(page, "lxml")
linktags = soup.findAll('span',attrs={'class':'paginationLink pageNum'})
page.close()
BeautifulSoup.clear(soup)
# this will return the current results,
# and pause the state, until the the next
# iteration is requested
yield linktags