获取多个BeautifulSoup的函数仅返回1个soup对象是什么原因?
问题原因
你的函数只返回1个soup对象的核心原因是return语句的缩进位置错误,被放置在了for循环的内部:
- for循环第一次迭代时,完成第一个url的soup生成、添加到列表后,就会执行
return直接终止函数运行 - 后续两个url的遍历逻辑完全没有被执行,自然只能得到长度为1的结果列表
修复方案
把return语句调整到for循环同级的位置,等所有url遍历完成后再返回结果列表,修正后代码如下:
def get_multi_soup(list_url): list_multi = [] for url in list_url: soup = BeautifulSoup(requests.get(url).text, "html.parser") list_multi.append(soup) # return移出for循环内部,放到循环结束后执行 return list_multi list_soup = get_multi_soup(list_url)
优化建议
- 网络请求建议添加超时限制,避免无响应站点导致程序长时间卡住,示例:
requests.get(url, timeout=10) - 可增加异常捕获逻辑,处理网络请求失败、页面解析错误的场景,避免单个url异常导致整个函数运行失败
内容的提问来源于stack exchange,提问作者Tobias
相关产品推荐
相关产品推荐

