beauthulsoup在while循环中调用时返回相同的结果

2024-09-30 01:31:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python的新手,正在尝试编写一个scraper来获取页面上具有多个分页的所有链接。在

page = urllib2.urlopen(givenurl,"",10000)

soup = BeautifulSoup(page, "lxml")

linktags = soup.findAll('span',attrs={'class':'paginationLink pageNum'}) 

page.close()

BeautifulSoup.clear(soup)

return linktags

它总是返回我传递的第一个url的结果。我做错什么了吗?在


Tags: 链接page页面urllib2scraperlxmlattrsurlopen
1条回答
网友
1楼 · 发布于 2024-09-30 01:31:49

@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

或者不返回,可以将其设为generator, using the ^{} keyword。生成器将返回每个结果并暂停到下一个循环:

^{pr2}$

相关问题 更多 >

    热门问题