我试图打印出结果页面的链接列表,然后在将变量 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,因此一旦您打印出第一个链接,递归就会发生。
您可以通过将递归回调移回一个缩进来解决此问题,但请注意,递归并不是解决此类问题的真正好方法 - 您实际上应该只使用嵌套循环。 (除此之外,您似乎没有基本情况,因此您的递归将永远不会结束。)
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
