我试图打印出一个结果页的链接列表,然后在向变量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)
它之所以这样做,是因为您递归地调用循环中的
scraper
,所以在打印第一个链接时就会发生递归。你知道吗您可以通过将递归回调移回一个缩进来解决这个问题,但是请注意,递归并不是解决这类问题的好方法—您应该使用嵌套循环。(除此之外,您似乎没有基本情况,因此您的递归将永远不会结束。)
从您的代码中,似乎您正在for循环中调用scraper函数来打印链接。只要把它移到for循环之外,就可以了。你知道吗
相关问题 更多 >
编程相关推荐