如何将多页面的BeautifulSoup结果合并为单个soup变量?
合并多页面BeautifulSoup内容的解决方案
你当前的代码每次循环都会重新给soup_a赋值,自然最后只剩最后一页的解析结果。下面给你两种可行的解决思路:
思路1:用列表存储所有页面的Soup对象
如果需要保留每个页面的独立结构,后续可以逐个处理,直接把每个页面的soup对象存入列表即可:
import requests from bs4 import BeautifulSoup headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"} soups_list = [] for i in range(1,6): url_a = f'https://www.mascotdb.com/native-american-high-school?page={i}' resp_a = requests.get(url_a, headers=headers) soup_a = BeautifulSoup(resp_a.content, "html.parser") soups_list.append(soup_a) # 后续处理时遍历列表里的每个soup for soup in soups_list: # 示例:提取页面中的目标元素 mascot_items = soup.find_all("div", class_="mascot-item") # 对提取到的内容做进一步处理
思路2:创建一个合并后的Soup对象
如果希望像操作单个页面一样处理所有5个页面的内容,可以新建一个空的Soup容器,把每个页面的内容合并进去:
import requests from bs4 import BeautifulSoup headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"} # 初始化一个空的HTML结构作为容器 combined_soup = BeautifulSoup("<html><body></body></html>", "html.parser") target_body = combined_soup.body for i in range(1,6): url_a = f'https://www.mascotdb.com/native-american-high-school?page={i}' resp_a = requests.get(url_a, headers=headers) soup_a = BeautifulSoup(resp_a.content, "html.parser") # 把当前页面body下的所有元素追加到合并容器的body中 for element in soup_a.body.contents: target_body.append(element) # 现在combined_soup就包含了所有页面的内容,直接操作它即可 all_mascots = combined_soup.find_all("div", class_="mascot-item")
两种思路按需选择:如果需要区分不同页面的数据,用列表存储更灵活;如果只是需要批量提取所有页面的相同类型元素,合并成单个soup更方便。
内容的提问来源于stack exchange,提问作者Abartel
相关产品推荐
相关产品推荐

