打印功能在继续之前不会打印完整列表

Print function won't print the complete list before moving on

我试图打印出结果页面的链接列表,然后在将变量 pageNum 加 1 的同时调用 scraper 函数本身。出于某种原因,此代码仅打印出每一页上的第一个结果,而不是打印所有结果,然后转到下一页。在递归调用 scraper 函数

之前,如何等待打印函数完全完成
from urllib.request import Request, urlopen
from bs4 import BeautifulSoup
import re


def scraper(pageNum):
        req = Request("http://www.someurl.com/Search/page="+str(pageNum)+"&facet_Category=20", headers={"User-Agent": "Mozilla/5.0"})
        html = urlopen(req).read()
        bsObj = BeautifulSoup(html)
        for result in bsObj.select("h2 a"):
            print(result["href"])
            scraper(pageNum+1)


scraper(1)    

之所以这样做,是因为您在循环中递归调用了 scraper,所以一旦您打印出第一个 link.

,递归就会发生

您可以通过将递归回调移回一个缩进来解决此问题,但请注意,递归并不是解决此类问题的真正好方法 - 您实际上应该只使用嵌套循环。 (除此之外,您似乎没有基本情况,因此您的递归将永远不会结束。)

def scraper(pageNum):
    while pageNum < SOME_TARGET_VALUE:
        req = Request("http://www.someurl.com/Search/page="+str(pageNum)+"&facet_Category=20", headers={"User-Agent": "Mozilla/5.0"})
        html = urlopen(req).read()
        bsObj = BeautifulSoup(html)
        for result in bsObj.select("h2 a"):
            print(result["href"])
        pageNum += 1

从您的代码来看,您似乎是在 for 循环中调用 scraper 函数来打印链接。只需将它移到 for 循环之外就可以了。

def scraper(pageNum):
    req = Request("http://www.someurl.com/Search/page="+str(pageNum)+"&facet_Category=20", headers={"User-Agent": "Mozilla/5.0"})
    html = urlopen(req).read()
    bsObj = BeautifulSoup(html)
    for result in bsObj.select("h2 a"):
        print(result["href"])
    scraper(pageNum+1)