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

2024-05-17 15:09:14 发布

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

我试图打印出一个结果页的链接列表,然后在向变量pageNum添加1的同时调用自身的scraper函数。出于某种原因,此代码只打印出每页上的第一个结果,而不是打印所有结果然后转到下一页。如何在递归调用scraper函数之前等待print函数完全完成

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)    

Tags: 函数fromimport列表链接requesthtmlresult
2条回答

它之所以这样做,是因为您递归地调用循环中的scraper,所以在打印第一个链接时就会发生递归。你知道吗

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

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)

相关问题 更多 >