如何构建可调用find_all的BeautifulSoup变量以合并多页HTML表格?
解决方法
你的问题确实出在soup_a的类型上——它是一个BeautifulSoup对象的列表,而find_all是单个BeautifulSoup对象的方法,直接对列表调用当然会报错。
要合并所有页面的表格,你需要遍历列表里的每个soup实例,分别提取表格后再汇总到同一个变量里,具体代码修改如下:
import requests from bs4 import BeautifulSoup as bs headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"} # 初始化存储所有表格的列表 main_table_a = [] 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 = bs(resp_a.content, "html.parser") # 提取当前页面的目标表格,添加到总列表中 tables = soup.find_all("table", {"class":"table table-striped views-table views-view-table cols-5"}) main_table_a.extend(tables) # 此时main_table_a就是包含所有5个页面表格的列表,可后续提取数据
说明:
- 直接在循环里处理每个页面的soup,提取表格后用
extend把表格元素追加到总列表(用extend而不是append,避免把每个页面的表格列表当成单个元素存入) - 若后续不需要用到每个页面的完整soup对象,就无需单独保存
soup_a列表
内容的提问来源于stack exchange,提问作者Abartel
相关产品推荐
相关产品推荐

