vih*_*vih 2 python beautifulsoup
我是python的新手,并尝试编写一个剪贴板来获取页面上的所有链接多个分页.我在while循环中调用以下代码.
page = urllib2.urlopen(givenurl,"",10000)
soup = BeautifulSoup(page, "lxml")
linktags = soup.findAll('span',attrs={'class':'paginationLink pageNum'})
page.close()
BeautifulSoup.clear(soup)
return linktags
Run Code Online (Sandbox Code Playgroud)
它总是返回我传递的第一个url的结果.难道我做错了什么?
@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
Run Code Online (Sandbox Code Playgroud)
或者,不是返回,而是使用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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
293 次 |
| 最近记录: |